【发布时间】:2019-08-23 08:34:48
【问题描述】:
我在 mysql 数据库中有 2 个表(简化示例数据):
Table 1: 3 names (unique)
Table 2: names (only from table 1), 3 dates, info
对于每个日期,有时表 2 中的所有 3 个名称,有时少于 3 个。
表 2 示例:
d1 n1 info
d1 n2 info
d1 n3 info
d2 n1 info
d2 n3 info
d3 n3 info
日期 1 有 3 个名字,日期 2 有 2 个名字,日期 3 有 1 个名字。
目标:我需要每个“日期”包含所有 3 个名称。我已经可以从表 2 中过滤 1 个日期并成功加入这些表以获得一个日期的预期结果,但是如何将所有名称“添加”到每个日期?
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
我的真实数据有更多的名称和日期,这使得单独的连接变得不切实际。感觉应该有一个简单的解决方案,但我找不到任何解决方案。
我也可以用代码来做到这一点(“为每个日期添加缺失的名字”),但我想知道它是否可以用 sql 来完成
使用 MySQL 10.1.37
【问题讨论】:
-
我是否理解正确,您希望我举一个我已经可以做的上述连接的例子?
-
不,我不希望你做任何你不喜欢的事情。但是,如果您愿意,您可能希望阅读提供的链接中已接受答案中的信息并采取行动。
-
@david 什么是“加入”?如果名称-日期对不存在匹配记录,信息列将包含什么?
-
@SalmanA 对于新添加的名称,信息列将为空;我只需要表 2 来包含每个日期的每个名称;新添加的名称没有任何信息(还)
-
@Strawberry 感谢您的意见。我不确定您是否真的认为我的示例数据上的 CREATE 和 INSERT 语句是必要的,因为它们的结构过于简单。我只是想仔细检查一下我是否理解正确。
标签: mysql sql outer-join