SQL Server 2008 데이터베이스를 사용합니다.테이블 B에없는 테이블 A에서 레코드를 찾는 방법은 무엇입니까?
Table A
:
Table B
:
request_id|order_id|e-mail
100 |2563 |[email protected]
300 |4784 |[email protected]
600 |9032 |[email protected]
650 |2578 |[email protected]
850 |8432 |[email protected]
012,351,641
request_id|order_id|e-mail
100 |2567 |[email protected]
100 |4784 |[email protected]
450 |2578 |[email protected]
450 |8432 |[email protected]
600 |9032 |[email protected]
600 |9033 |[email protected]
Table B
도 id
및 order_no
열 및 많은 다른 사람의 열이
나는 이와 같은 열 개의 테이블이
당신이 볼 수 있듯이, 테이블 A에 주어진 request_id
번보다 내가 order_id
에 의해 테이블 B에 존재하지 않는 테이블 A의 모든 레코드를 찾을 필요가
을 (100 개 & (450) 기록을 참조) 더 발생할 수 있지만, 열 값은 request_id
입니다. 이 기준은 기록 어디에 만 만족하면 테이블 B를에없는 표 A의 레코드 위에서 볼 수 있듯이
request_id|order_id|e-mail
100 |2567 |[email protected]
100 |4784 |[email protected]
450 |2578 |[email protected]
450 |8432 |[email protected]
600 |9033 |[email protected]
:
Output
: 위의 예를 들어
나는 이런 식으로 뭔가를 기대
select
D.request_id, D.order_id
from
table A AS D
where
D.request_id = 600
and D.order_id not in (select M.order_id
from table B AS M
where M.request_id = 600)
:
order_id=600
나는 T-SQL 쿼리의 스케치를 생성
불행히도 request_id
에 대한 내 검색어를 변환하는 방법을 모르겠습니다. 첫 번째 생각은 테이블 A의 모든 request_id
에 while 루프를 사용하는 것이지만 SQL 세계에서는 현명하지 않은 것처럼 보입니다.
고맙습니다. 현재 실제 예제에서는 테스트 할 수 없지만 제대로 작동하는 것 같습니다. 한 가지 질문 : 마지막 WHERE 조건을 "WHERE b.order_id IS NULL"로 변경합니까? 나는 그것도 작동하고 그것은 나를 위해 더 편안하게 보이기 때문에, 나는 모든 일치하지 않는 request_id를 찾고 싶다. :) – Viper
두 열 ('request_id'와'order_id')이'JOIN' 절에서 사용 되었기 때문에, 너는 그것을 필요로하지 않는다. 그건 같은거야. – AgentSQL
어쩌면 나는 요구 사항을 잘못 이해하고있다.하지만 OP가 request_id에는 테이블 A와 일치하지만 order_id에는 일치하지 않는 모든 레코드가있는 모든 경우를 원한다고 생각했다. 위 쿼리는 테이블 B의 레코드가 request_id 또는 order_id에서 일치하지 않는 테이블 A의 레코드를 나열합니다. – Jay