这就是我想弄清楚的。假设我有两个数据集,我试图通过将它们连接在一起并将它们并排放置并查看差异来进行比较:
Table1 Name Description Style Cost Chair-1 Simple Chair Contemporary $100 Table2 Name Description Style Cost Chair-1 Simple Chair Modern $150
I would write some SQL like this:
SELECT T1.Name, T1.Description, T1.Style, T1.Cost
T2.Name, T2.Description, T2.Style, T2.Cost
FROM Table1 T1
FULL OUTER JOIN Table2 T2
ON T1.Name = T2.Name
AND T1.Description = T2.Description
AND T1.Style = T2.Style
--WHERE T1.Cost <> T2.Cost
但是,结果集会给我 2 条记录,T1 记录的 T2 字段中为 NULL,T2 记录的 T1 字段中为 NULL,因为它们不完全匹配。
我的问题是:如果这两个数据集在某些字段上匹配但不是全部匹配,是否有任何方法可以将它们并排显示?我尝试使用 FULL OUTER JOIN 来执行此操作,但它们仍然必须匹配 JOIN 条件中的所有字段。
例如,由于上面的两条记录具有相同的名称和描述但样式不同,我希望将它们连接在一起,因为它们符合 3 个条件中的 2 个。
我会在 SQL Server 2016 上运行它。
编辑:我认为这可能是 OUTER APPLY 的一个用例,但我不完全确定。我重写了我的代码,看起来像这样(这个例子都是伪代码):
SELECT T1.Name, T1.Description, T1.Style, T1.Cost
T2.Name, T2.Description, T2.Style, T2.Cost
FROM Table1 T1
OUTER APPLY
(
SELECT T2.Name, T2.Description, T2.Style, T2.Cost
FROM Table2 T2
WHERE T1.Name = T2.Name
AND T1.Description = T2.Description
AND T1.Style = T2.Style
--AND T1.Cost <> T2.Cost --This is what I'm looking for ultimately
) T2
我对 OUTER APPLY 将返回符合最匹配条件的记录的理解是否正确?
最佳答案
您可以使用OR
进行连接。
SELECT T1.Name, T1.Description, T1.Style, T1.Cost
T2.Name, T2.Description, T2.Style, T2.Cost
FROM Table1 T1 FULL OUTER JOIN
Table2 T2
ON T1.Name = T2.Name OR
T1.Description = T2.Description OR
T1.Style = T2.Style
如果 3 列中的任何 1 列匹配,这将为您提供结果。可以结合使用 AND
和 OR
来匹配 3 列中的 2 列。
示例:
(T1.Name = T2.Name AND T1.Description = T2.Description)
OR (T1.Description = T2.Description AND T1.Style = T2.Style)
OR (T1.Name = T2.Name AND T1.Style = T2.Style)
关于sql - 如何返回匹配 JOIN 条件某些部分的数据,几乎像 FULL OUTER JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49680667/