多表连接查询 - ID 和数据表

Posted

技术标签:

【中文标题】多表连接查询 - ID 和数据表【英文标题】:Multiple table join query - IDs and data tables 【发布时间】:2021-09-09 16:21:52 【问题描述】:

SOLVED 原来是我的 where 子句抛出了结果,我改变了这个并将 where 子句添加到 ON 语句中

我需要一些帮助。

我有一个包含 2500 万个 ID 的表和 4 个包含 ID 和数据的表。我需要使用这 2500 万个 ID 以及 4 个表中的关联表数据创建一个新表。每个数据表都不会包含完整的 2500 万个 ID。举个例子;

ID 表:

ID
A
B

表 1

ID measure_a measure_b
B 1 3

表 2

ID measure_f measure_g
A 3 4

等等。

预期输出:

ID measure_a measure_b measure_f measure_g
A 3 4 NULL NULL
B NULL NULL 1 3

最重要的是 2500 万个 ID 进入决赛桌。我尝试了多次连接,但最终得到的 ID 数量大大减少,我认为这是由于连接条件不匹配的 ID 被过滤掉了。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

你会使用left joins:

select ids.id, t1.measure_a, t1.measure_b, t2.measure_f, t2.measure_g
from ids left join
     table1 t1
     on ids.id = t1.id left join
     table2 t2
     on ids.id = t2.id;

【讨论】:

您好,感谢您的回复。这不起作用,因为在查询结束时(在这种情况下,在 4 个左连接之后)当初始 ID 表为 25m 时,我留下了数万条记录。我需要保留所有 ID,加入似乎会丢弃任何不匹配的 ID,即使是左连接也是如此。例如,只关注 1 个左连接,将新表的记录数减少到 830 万 - 随后这是它已连接到的数据表的计数。 我认为这应该可以,请检查一下。看到他正在使用 ids.id 对两个表进行左连接。 我确实在做同样的事情(使用 ID 表中的 ID 作为所有连接的连接条件)。 我发现了这个问题,我的 where 子句过滤器正在使用扳手。将其换出并将条件添加到 ON 语句中修复了它。谢谢。

以上是关于多表连接查询 - ID 和数据表的主要内容,如果未能解决你的问题,请参考以下文章

sql多表连接查询问题

python 之 数据库(多表查询之连接查询子查询pymysql模块的使用)

[JavaWeb-MySQL]多表查询(内连接,外连接,子查询)

多表查询_左连接多表操作_子查询

mysql 多表查询内连接外连接

SQL怎么连接查询2个表?