2014-06-10 3 views
-2

SQL 자체 조인을 사용하여 where 조건과 일치하는 일치하지 않는 레코드를 반환하려고합니다.SQL 자체 조인을 사용하여 일치하지 않는 레코드를 반환합니다.

select RxNum,image from OeImage 
where RxNum in ('100','200','300') 

표 OeImage에서 값은 100,300입니다. 200 값이 없습니다.

입력 값이 매개 변수로 전달되는 동안 자체 조인을 사용하여 사용 가능한 레코드를 반환하지 않는 방법. 당신이 검색하려는 존재하지 않는 값 목록이 작 으면

+0

'UNION SELECT (200), OeImage FROM 널'당신은 당신의 쿼리에 이런 식으로 뭔가를 추가 할 수 있습니다. – potashin

+0

이것은 조인이 아닙니다. 또한'RxNum'은 어떤 타입입니까? –

+0

RxNum의 데이터 형식은 일반적으로 Nvarchar – goofyui

답변

0

,이 같은 UNION ALL 사용할 수 있습니다 요소 목록이 길거나 여러 쿼리에 필요한 경우

SELECT * 
FROM (
    SELECT '100' RxNum 
    UNION ALL 
    SELECT '200'  
    UNION ALL 
    SELECT '300' 
    ) myList 
WHERE NOT EXISTS (
     SELECT * 
     FROM OeImage 
     WHERE RxNum = myList.RxNum 
     ) 

을, 이 같은 Temp Table variable를 사용할 수 있습니다

DECLARE @myList TABLE (RxNum NVARCHAR(50)) 

INSERT INTO @myList 
VALUES ('100') 
    ,('200') 
    ,('300') 

SELECT * 
FROM @myList 
WHERE NOT EXISTS (
     SELECT * 
     FROM OeImage 
     WHERE RxNum = @myList.RxNum 
     ) 
+0

하나의 구문을 사용할 수 없습니다. 그리고 where 조건에서, 대신에 =를 사용할 수 있습니다. UNION ALL보다 다른 대체품이 없습니다. 그것은 수동 계산입니다 – goofyui

+0

@goofyui 당신은 그 말을 할 수 있습니까? 죄송합니다. – arserbin3

+0

답변으로 '200'값을 선택하려면 어딘가에 행으로 존재해야하며 단순히 'in' 절에있을 수 없습니다. 이것은이 두 가지 방법으로 달성 할 수 있습니다. 이 목록의 출처는 어디에서 비롯됩니까? – arserbin3

관련 문제