2012-10-24 2 views
0

"HoldingQueue"라는 테이블이 있는데 두 행을 두 값과 비교하여 두 행을 모두 비교하고 각 행과 일치하지 않는 행을 반환합니다. 값. 나는 그것이 "1PX1하지 모든 것을 반환해야 할 | - |이 ONLY"Test2를 3PX1 "를 반환MySQL의 두 테이블에서 두 개의 행을 비교하여 음수 결과 만 표시

SELECT * FROM HoldingQueue WHERE ItemCode<>"1PX1" AND Channel<>"Test"; 

:

* * * * * * * * * * * * 
* ItemCode * Channel * 
* * * * * * * * * * * * 
* 1PX1  * Test  * 
* * * * * * * * * * * * 
* 2PX1  * Test  * 
* * * * * * * * * * * * 
* 3PX1  * Test2 * 
* * * * * * * * * * * * 

그리고 쿼리 : 여기에 내용의 예입니다 Test "-"2PX1 | Test "도 반환해야합니다.

아이디어가 있으십니까? 벽에 내 머리를 두드리는 소리.

편집 : 좋아요, OR을 사용하여 작은 데이터 세트로 작업하고 있습니다 ...하지만 방금 문제가 있음을 깨달았습니다. 나는 "ItemCode"와 "Channel"을 여러 항목을 가진 다른 테이블에서 비교하려고 시도하고 있지만, 그 테이블에 여러 항목이 있기 때문에 모든 것이 적어도 한 번은 값 집합의

제 질문은 이보다 더 복잡하다고 생각합니다.

편집 # 2 : ... 알았어요

SELECT Channel, ItemCode FROM HoldingQueue H 
WHERE NOT EXISTS 
(SELECT * FROM SKUList S 
    WHERE 
     H.ItemCode=S.SKU 
     AND 
     H.Channel=S.Channel 
) GROUP BY H.Channel,H.ItemCode; 

나는 두 번째 SKUList 테이블에서 아무것도 일치하지 않는 항목을 원했다. 이것은 그것을했다. 그가 제대로 쿼리 OR

답변

1

변경 AND (문제 내가 직면 한 대부분을 왼쪽) 내 최초의 질문에 대답 않았다, 그래서

SELECT * FROM HoldingQueue WHERE ItemCode<>"1PX1" OR Channel<>"Test"; 
+0

잘되기 때문에 세르게이 Kudriavtsev에게 답을 표시합니다, 그것은 작은 샘플과 함께 작동하는 것처럼 보이지만 큰 데이터 세트에서는 작동하지 않습니다. 나는 내 메인 포스트를 업데이트 할 것이다. – rwhit85