SQL全外连接

3
我正在尝试编写一个联接语句,将以下三个数据集合并在一起(这是使用MS SQL Server)。
Set 1 ID Date Col1 1 Jan 11 a1 1 Jan 13 a2
Set 2 ID Date Col2 1 Jan 11 b1 1 Jan 15 b2
Set 3 ID Date Col3 1 Jan 15 c1 1 Jan 17 c2
合并后的数据集 ID Date Col1 Col2 Col3 1 Jan 11 a1 b1 1 Jan 13 a2 1 Jan 15 b2 c1 1 Jan 17 c2
我认为全外连接能够实现此目的,但我遇到了严重的交叉乘积问题。

你遇到了哪些主要的叉积问题? - Jensen Ching
2
这个数据结构和组合数据很令人困惑。ID在所有行中都是相同的吗?哪个FK与这些集合相关?你尝试过什么,遇到了什么问题? - Jeremy Morehouse
同意。我认为他不需要在结果表中包含ID。 - Mosty Mostacho
添加一些细节。实际上我包含了一个ID,但实际上有很多个ID。我正在查看医疗数据,所以ID是患者ID。集合1是处方,因此日期是药物开始日期。集合2是实验室结果,因此日期是观察日期。集合3是预约,日期是预约日期。我正在尝试获取完整的数据集以生成一些报告。 - John Soer
3个回答

3

试试这个:

select coalesce(t1.date, t2.date, t3.date) date, col1, col2, col3 from table1 t1
full outer join table2 t2 on (t1.date = t2.date)
full outer join table3 t3 on (t2.date = t3.date)

1
根据您的数据集,您似乎想要根据“日期”列加入这3个表。请注意,我在此处忽略了ID列,直到您澄清为什么所有ID都设置为1为止。
SELECT ISNULL(set1.dt, ISNULL(set2.dt, set3.dt)) as 'Date', col1, col2, col3
FROM set1
FULL OUTER JOIN set2 ON CAST(set1.dt AS DATE) = CAST(set2.dt AS DATE)
FULL OUTER JOIN set3 ON CAST(set2.dt AS DATE) = CAST(set3.dt AS DATE)

请参见顶部的注释,解释这些ID。 - John Soer

1

SELECT ISNULL(a.ID,isnull(b.ID,c.ID)) ID,coalesce(a.dt, b.dt, c.dt) , Col1, Col2, Col3 FROM set1 a FULL OUTER JOIN set2 b ON a.dt = b.dt FULL OUTER JOIN set3 c ON b.dt= c.dt

此查询语句为IT相关内容。该语句使用了SQL语言,用于从set1、set2和set3三个数据集中获取ID、dt、Col1、Col2和Col3字段的值。通过FULL OUTER JOIN操作将这三个数据集连接起来,并使用ISNULL和coalesce函数处理空值和重复值的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接