提前感谢您的帮助!
我有4张桌子:
A为主表,有唯一ID
B、C 和 D 是包含此 ID 和日期及其他信息的表。
我必须创建一个列表:
A.ID、A.info、B、C 或 D 中存在的日期 以及来自 B、C 和 D 的其他信息
示例:
表A
ID_A 信息A 及其他
1 汤姆
表B
日期 ID_A 信息B 及其他
20241001 1 20
20241005 1 30
20241006 1 40
表C
日期 ID_A infoC 及其他
20241001 1 个
20241002 1 年
20241006 1 z
表D
日期 ID_A infoD 及其他
20241001 1 abc
20241002 1 个cde
20241007 1 架
我需要这个结果:
ID 信息A 日期信息B 信息C 信息D
1 汤姆 20240101 20 x abc
1 汤姆 20240102 NoData 和 cde
1 汤姆 20240105 30 无数据 无数据
1 汤姆 20240106 40 z 无数据
1 汤姆 20240107 NoData NoData fgh
(虽然我写的是表格形式,但是最终显示的很马虎,所以我写的是NoData而不是空数据)
我可以使用左外连接连接这些表,但无法连接它们,因此结果中只有一个日期列,并且如果子表中的数据属于同一日期,则它们将仅位于一行中,因为子表不包含所有日期。
非常感谢!
您应该首先提取表 B、C 和 D 中特定 ID 的所有可用日期,然后根据 ID 和日期对各个表进行外连接。
像这样的东西:
SELECT a.id,
a.info,
dates.date,
b.info,
c.info,
d.info
FROM a
JOIN (SELECT id,
date
FROM b
UNION
SELECT id,
date
FROM c
UNION
SELECT id,
date
FROM d
) AS dates
ON a.id = dates.id
LEFT OUTER JOIN b
ON a.id = b.id
AND dates.date = b.date
LEFT OUTER JOIN c
ON a.id = c.id
AND dates.date = c.date
LEFT OUTER JOIN d
ON a.id = d.id
AND dates.date = d.date
尚不清楚您使用的是什么 RDBMS,因此语法可能略有不同。