连接两个表带来不匹配的值MYSQL
Posted
技术标签:
【中文标题】连接两个表带来不匹配的值MYSQL【英文标题】:Join two tables bring mismatch values MYSQL 【发布时间】:2021-03-08 04:12:27 【问题描述】:我有两个超过 400 万条记录的表,我需要进行选择查询,其中两列匹配会在此匹配中带来两个表的值,然后我会将其插入到第 3 个表中:
这是表 A:(bitfinex)
这是表 B:(Kraken)
我需要在时间戳和 exchange_pair 匹配的地方进行 SELECT,正如您在表 B 中的这张图片中看到的那样,相同的时间戳可以有多个 exchange_pair,我需要做的是将那些与其他表列匹配并带上两个表内容
这是我一次使用的查询,但在分析结果时,我在连接上有一些不匹配的值(我没有找到关系,它不是时间戳或交换对)我想知道我的查询语法是否正确我正在寻找的结果。
INSERT IGNORE INTO spreads(timestamp,exchange_pair,platform_a,platform_b,a_bid_price,b_bid_price, high_value,spread_percentage,spread)
SELECT B.timestamp, B.exchange_pair,'bitfinex' as platform_a,'kraken' as platform_b,
B.bid,
K.bid_price,
(SELECT IF (B.bid>K.bid_price,B.bid,K.bid_price)),
(SELECT (((ABS(K.bid_price - B.bid))*100)/(SELECT IF (B.bid>K.bid_price,B.bid,K.bid_price)))),
ABS(K.bid_price - B.bid) AS spread
FROM bitfinex AS B
JOIN kraken AS K
ON B.timestamp = K.timestamp
JOIN kraken AS K2
ON B.exchange_pair = K2.exchange_pair
WHERE K.exchange_pair = B.exchange_pair AND B.timestamp = K.timestamp ;
如果使用内部连接或仅连接,我仍然感到困惑,我还添加了“Where”子句以确保交换对和时间戳匹配。
【问题讨论】:
你想要哪几行?您的示例中的哪些行来自哪个表?对于不同步的时间戳,您需要怎么做? 【参考方案1】:怎么样:
select b.timestamp, b.exchange_pair, b.bid, k.ask_array_price
from bitfinex b
join kraken k on k.timestamp = b.timestamp and k.exchange_pair = b.exchange_pair
我建议任何有关 SQL 查询的问题都可以用脚本来补充,以便快速有效地设置所需的表和包含的数据,以便尽快开始编写查询。发送者知道如何做这件事对发送者有好处,对接收者也有好处,因为一旦表格和数据到位,就可以开始回答问题。
我承认,在这种特殊情况下,解决方案可能很简单,不必经历整个过程,但尽管如此。
以下是此类脚本的外观示例(针对此特定问题):
第 1 步:创建 bitfinex 表
CREATE TABLE test.bitfinex (
`timestamp` DATETIME NOT NULL,
exchange_pair varchar(30) NULL,
bid double NULL,
id int auto_increment NOT NULL
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;
第 2 步:创建海妖表
CREATE TABLE test.kraken (
id INT auto_increment NOT NULL,
`timestamp` DATETIME NULL,
exchange_pair varchar(30) NULL,
ask_array_price DOUBLE NULL
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;
第 3 步:用示例数据(或相关的真实数据)填充 bitfinex 表
insert into bitfinex (timestamp, exchange_pair, bid)
select *,rand() * 1000 from
(
select '2021/3/3 9:34:55' timestamp
union all
select '2021/3/3 9:34:56'
union all
select '2021/3/3 9:34:57'
union all
select '2021/3/3 9:34:58'
) a
cross join
(
select 'ETH-USD' exchange_pair
union all
select 'BTC-USD'
union all
select 'ETH-BTC'
) b
用数据填充海妖表
插入海妖(时间戳,exchange_pair,ask_array_price) 选择时间戳,exchange_pair,rand() * 1000 从 比特币
【讨论】:
以上是关于连接两个表带来不匹配的值MYSQL的主要内容,如果未能解决你的问题,请参考以下文章