Sql 使用表上的自联接基于同一表中的链接列比较两列
我有以下资料: 表aSql 使用表上的自联接基于同一表中的链接列比较两列,sql,self-join,Sql,Self Join,我有以下资料: 表a ID | DocumentType | DocumentCode | DocumentDate | Warehouse | RefecenceCode ---+--------------+--------------+--------------+-----------+-------------- 1 | DeliveryNote | DOC-001 | 2017-04-21 | 1 | NULL 2 | In
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具有相同的信息,但有时可能不同,在这种情况下,我尝试创建一个查询(我认为自连接
适用于此处),以便根据参考代码检查DOC-002中与DOC-001中不同的信息,但我没能做到
如果有人能帮我一把,我将非常感激
这是SQL查询:
select *
from TableA tbl
inner join TableA tbla on tbl.id = tbla.id
where tbla.ReferenceCode = tbl.DocumentCode
您确实希望将表连接到自身。但是加入
ID
列将不起作用,因为该列不将记录相互关联。相反,您需要加入DocumentCode
和ReferenceCode
字段。然后只包括有一些差异的记录(在本例中,我只是比较DocumentDate和Warehouse字段)
你犯了什么错误?请显示您尝试的代码。请再添加一点源数据和所需的结果。@TabAlleman-我已经编辑了这篇文章。我没有得到任何错误,只是我没有得到结果,没有返回任何结果。你没有得到任何结果,因为你在ID上链接,并且1永远不等于2。您的第一步可能是加入
tbl.DocumentCode=tbla.ReferenceCode
,但是我仍然不确定您希望结果是什么样子。@Jerrad-我只想显示作为参考代码的行,另一个文档,如果包含与源文档不同的信息。它不应该考虑文档类型-这些信息纯粹是信息。它必须进行比较,如果源文档和目的文档之间存在任何差异,则应该显示该行。只包括在<>代码> 子句中要考虑的任何字段。我只希望通过<代码> ReferenceCode < /代码>显示与另一个链接的行。我没能做到……编辑你的问题,包括一个你想要结果的例子。
select tbla.*
from TableA tbl
join TableA tbla on tbl.DocumentCode = tbla.ReferenceCode
where tbla.DocumentDate != tbl.DocumentDate
or tbla.Warehouse != tbl.Warehouse