多次将 table A 加入 table B
Join table A into table B multiple times
我在 mysql 数据库中有 2 个 table(简化示例数据):
Table 1: 3 names (unique)
Table 2: names (only from table 1), 3 dates, info
对于每个日期,有时 table 2 中的所有 3 个名称,有时少于 3 个。
table2 的示例:
d1 n1 info
d1 n2 info
d1 n3 info
d2 n1 info
d2 n3 info
d3 n3 info
日期 1 获得了所有 3 个名字,日期 2 获得了 2 个名字,日期 3 获得了 1 个名字。
目标:我需要每个 "date" 拥有全部 3 个名字。我已经可以从 table 2 中过滤 1 个日期并成功加入 table 以获得一个日期的预期结果,但是我如何 "add" 每个日期的所有名称?
d1 n1 info
d1 n2 info
d1 n3 info
d2 n1 info
d2 n2 (added by the join, "info" is empty)
d2 n3 info
d3 n1 (added by the join, "info" is empty)
d3 n2 (added by the join, "info" is empty)
d3 n3 info
我的真实数据有更多的名称和日期,这使得单独的连接变得不切实际。感觉应该有一个简单的解决办法,但我找不到。
我也可以用代码 ("for each date add missing names") 做到这一点,但我想知道是否可以用 sql
正在处理 MySQL 10.1.37
使用 CROSS JOIN
创建名称和日期的所有可能组合,后跟 LEFT JOIN
:
SELECT name_table.name, datelist.date, info_table.info
FROM name_table
CROSS JOIN (SELECT DISTINCT date FROM info_table) AS datelist
LEFT JOIN info_table ON name_table.name = info_table.name AND datelist.date = info_table.date
我在 mysql 数据库中有 2 个 table(简化示例数据):
Table 1: 3 names (unique)
Table 2: names (only from table 1), 3 dates, info
对于每个日期,有时 table 2 中的所有 3 个名称,有时少于 3 个。
table2 的示例:
d1 n1 info
d1 n2 info
d1 n3 info
d2 n1 info
d2 n3 info
d3 n3 info
日期 1 获得了所有 3 个名字,日期 2 获得了 2 个名字,日期 3 获得了 1 个名字。
目标:我需要每个 "date" 拥有全部 3 个名字。我已经可以从 table 2 中过滤 1 个日期并成功加入 table 以获得一个日期的预期结果,但是我如何 "add" 每个日期的所有名称?
d1 n1 info
d1 n2 info
d1 n3 info
d2 n1 info
d2 n2 (added by the join, "info" is empty)
d2 n3 info
d3 n1 (added by the join, "info" is empty)
d3 n2 (added by the join, "info" is empty)
d3 n3 info
我的真实数据有更多的名称和日期,这使得单独的连接变得不切实际。感觉应该有一个简单的解决办法,但我找不到。
我也可以用代码 ("for each date add missing names") 做到这一点,但我想知道是否可以用 sql
正在处理 MySQL 10.1.37
使用 CROSS JOIN
创建名称和日期的所有可能组合,后跟 LEFT JOIN
:
SELECT name_table.name, datelist.date, info_table.info
FROM name_table
CROSS JOIN (SELECT DISTINCT date FROM info_table) AS datelist
LEFT JOIN info_table ON name_table.name = info_table.name AND datelist.date = info_table.date