在表上使用自联接可以根据同一个表中的链接列比较两列

时间:2017-04-21 12:59:01

标签: sql self-join

我有以下内容:

表A

ID | DocumentType | DocumentCode | DocumentDate | Warehouse | RefecenceCode  
---+--------------+--------------+--------------+-----------+--------------    
 1 | DeliveryNote | DOC-001      | 2017-04-21   |    1      |     NULL   
 2 | Invoice      | DOC-002      | 2017-04-21   |    2      |    DOC-001

如您所见,每个文档的仓库不同,DOC-002通过ReferenceCode列中的信息与DOC-001相关(这意味着从DOC-001作为源文档开始创建)。

DOC-002应该具有相同的信息,但有时可能会有所不同,在这种情况下,我尝试创建一个查询(我认为self join适用于此处)以检查哪些信息在这种情况下DOC-002与DOC-001相比有所不同,基于参考代码,但我无法设法做到这一点。

如果有人能帮助我,我会非常感激。

这是SQL查询:

select * 
from TableA tbl
inner join TableA tbla on tbl.id = tbla.id
where tbla.ReferenceCode = tbl.DocumentCode

1 个答案:

答案 0 :(得分:0)

你确实想加入这个表格。但是加入ID列将不起作用,因为该列不会将记录相互关联。相反,您需要加入DocumentCodeReferenceCode字段。然后只包括有一些差异的记录(在这种情况下,我只是比较DocumentDate和Warehouse字段)。

select tbla.* 
from TableA tbl
join TableA tbla on tbl.DocumentCode = tbla.ReferenceCode
where tbla.DocumentDate != tbl.DocumentDate
or tbla.Warehouse != tbl.Warehouse