Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用表上的自联接基于同一表中的链接列比较两列_Sql_Self Join - Fatal编程技术网

Sql 使用表上的自联接基于同一表中的链接列比较两列

Sql 使用表上的自联接基于同一表中的链接列比较两列,sql,self-join,Sql,Self Join,我有以下资料: 表a ID | DocumentType | DocumentCode | DocumentDate | Warehouse | RefecenceCode ---+--------------+--------------+--------------+-----------+-------------- 1 | DeliveryNote | DOC-001 | 2017-04-21 | 1 | NULL 2 | In

我有以下资料:

表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具有相同的信息,但有时可能不同,在这种情况下,我尝试创建一个查询(我认为
自连接
适用于此处),以便根据参考代码检查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