2017-04-21 4 views
-2

같은 테이블에 링크 된 열을 기반으로 두 개의 열을 비교하는 테이블에 조인나는 다음과 같은 한

TableA의

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과 비교되었지만 관리 할 수 ​​없었습니다.

누군가가 나를 도와 줄 수 있다면 매우 감사 할 것입니다. 당신은 실제로 자체에 테이블을 가입하려는

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

어떤 오류가 발생 했습니까? 시도한 코드를 보여주십시오. –

+1

소스 데이터와 원하는 결과를 더 추가하십시오. –

+0

@TabAlleman - 게시물을 편집했습니다. 어떤 오류도 발생하지 않고 결과가 나타나지 않고 결과가 반환되지 않습니다. – cdrrrrr

답변

0

:

는 SQL 쿼리입니다. 그러나 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 
+0

DocumentType을 고려하지 않아야합니다.이 정보는 순수한 정보입니다. 비교해야하며 원본 문서와 대상 문서간에 차이가 있으면 해당 행이 표시되어야합니다. – cdrrrrr

+0

'WHERE' 절에서 고려해야 할 필드를 * 포함 시키십시오. – Jerrad

+0

'ReferenceCode'를 통해 다른 행에 연결된 행만 표시하고 싶습니다. 나는 그것을 달성 할 수 없었습니다 ... – cdrrrrr