2016-11-24 3 views
1

누락 된 행을 찾아야하지만 둘 다 반환 할 데이터가 필요합니다. 나는 구글을 체크했지만 비슷한 질문을 찾지 못했습니다.SQL Server : Table1의 행을 Table2에는 없지만 테이블의 데이터가 필요합니다.

을 : select 문에서 결과가 표 2에없는 누락 된 시간의 날짜와 trnsaction 수 있어야한다 그래서

TableA 

thetime real-time 
1  1 pm 
2  5 pm 
3  7 pm 
4  9 pm 
5  11 pm 

Table2 
thedate transaction_num thetime 
1/1/2000 111    1 
1/1/2000 111    4 
1/1/2000 111    5 
2/1/2000 111    2 
2/1/2000 111    4 
2/1/2000 222    1 
2/1/2000 222    5 

나는 표에 시간이 없어 표 2에서 날짜와 transaction_num를 선택해야합니다

thedate transaction_num thetime 
1/1/2000 111    2 
1/1/2000 111    3 
2/1/2000 111    1 
2/1/2000 111    3 
2/1/2000 111    5 
2/1/2000 222    2 
2/1/2000 222    3 
2/1/2000 222    4 
내가 가진 코드이지만 나에게 여러 부분으로 바인딩 오류를주고있다 :

select t2.thedate, t2.transaction_num, t1.thetime 
from table2 t2 
where not exists(select t1.thetime 
       from table1 t1 
       where t2.thetime = t1.thetime) 

사람이이 문제를 해결하거나 답변으로 날 지점 수있는 방법을 알고 있나요? 누락 된 행에 대한 스택 오버플로에 대한 대부분의 질문에는 한 테이블에서 데이터를 반환하는 것과 관련이 있지만 두 테이블에는이 테이블이 필요합니다.

+2

당신이 명시 적으로 thetime'가 T1에없는'T2의 행을 검사하는 경우 , 당신은't1.thetime'이 SELECT 절에있을 무엇을 기대 하는가? –

+0

내가 이해할 지 모르겠다. 'thetime' 2, 3, 1 (예상 결과로부터)이'Table A '에서 제공 한 샘플에 나타납니다. 설명 할 수 있니? –

+0

't2.thetime = t1.thetime'에 참여하고 있다면, 왜 select 문에서't2.thetime'을 사용하지 않으시겠습니까? – sgmoore

답변

2

모든 날짜의 모든 transaction_nums 그들과 관련된 모든 시간을 해봐야 할 것 같습니다 감사합니다. 그렇지 않으면 실종 된 것으로 간주됩니다.

이렇게하려면 먼저 table2의 distinct date와 transaction_num과 table1의 시간을 교차 가입시킬 수 있습니다. 그런 다음이 파생 테이블에 조인을 남겨 놓아 누락 된 행을 가져옵니다.

select tt.thedate, tt.transaction_num,tt.thetime 
    from (
      select * from (
     (select distinct thedate,transaction_num from table2) a cross join 
     (select distinct thetime from table1) b 
     ) 
     ) tt 
     left join table2 t2 on t2.transaction_num=tt.transaction_num and t2.thetime=tt.thetime and tt.thedate=t2.thedate 
where t2.transaction_num is null and t2.thedate is null and t2.thetime is null 

Sample Demo

+0

샘플 데모의 코드가 정확히 무엇을 찾고 있습니까? 정말 고맙습니다. 나는이 코드가 복잡하다고 생각하지 않았다. 나는 놀랐다. – Sven