2013-05-24 5 views
-1

JOIN 문으로 NOT IN 작업을 수행하려면 어떻게해야합니까? 나는 문제가 세 번째 절 생각JOIN 문과 함께 NOT IN 사용

SELECT A.* 
FROM products A 
LEFT OUTER JOIN productmeta B ON A.id=B.product_id 
WHERE(B.group_id IS NULL OR B.group_id=0) 
AND (B.collection_id IS NULL OR B.collection_id=0) 
AND B.id NOT IN (SELECT collection_id FROM collections) 
+2

이 쿼리는 구문 상 유효합니다. => 작동한다는 것을 의미합니다. – zerkms

+0

더 자세히 설명해주십시오. 더 좋은 방법이있을 수 있습니다. – logixologist

+0

어떤 점에서 이것이 작동하지 않습니까? 몇 가지 샘플 데이터, 수행하려는 작업에 대한 설명 W 조회에서 생성하지 않는 샘플 출력이 있어야합니다. 구문은 구문이 정확하다면 정확합니다. 왜 당신이 원하는 결과를 얻지 못하면 원하는 결과를 만들어 내지 못하는지 말하기 어렵습니다. –

답변

2

: 여기 아래에있는 내 쿼리입니다. NULL은 항상 실패하게 만듭니다. 하지만 그 테스트하기 쉬운 : 내가 그들을 변경하지 않았지만

SELECT A.* 
FROM products A LEFT OUTER JOIN 
    productmeta B 
    ON A.id=B.product_id 
WHERE (B.group_id IS NULL OR B.group_id=0) AND 
     (B.collection_id IS NULL OR B.collection_id=0) AND 
     (B.ID is NULL or B.id NOT IN (SELECT collection_id FROM collections)); 

pproductspmproductmeta을위한 더 나은 별칭을위한 더 나은 별명이 될 것입니다.

+0

고맙습니다! @ 고든! 그것은 약간 절름발이 였고 이전 절에 NULL 검사를 수행했습니다. 내 잘못이야! – gwinh