2017-04-11 1 views
2

첫 번째 조건이 무시되었습니다.SQL Server : where 절을 무시합니다.

샘플 테이블 및 레코드.

헤더 테이블 :

ID Title  Group 
------------------------- 
1 Header1 SERVICES 
2 Header2 PACKAGING 
3 Header3 COLS 

라인 테이블 :

ID HEADER_ID Title DEPARTMENT 
------------------------------------- 
1 1 LINE1 DEPARTMENT B 
2 2 LINE2 DEPARTMENT M 
3 2 LINE3 DEPARTMENT A 
4 3 LINE4 DEPARTMENT C 

사용자 이야기 :

  1. 나는이 다음 그룹에있는 모든 헤더를 나열하지 원하는 쿼리에서
    • 서비스
    • 포장
  2. 그리고 그 라인이 다음과 같은 부서에있는 곳도 나는 모든 헤더를 원하는 :
    • 부서 B
    • 부서 M
그것은 작동하고

SELECT HEADER.* 
FROM HEADER 
INNER JOIN LINE ON HEADER.ID = LINE.HEADER_ID 
WHERE (HEADER.GROUP <> “SERVICES” OR HEADER.GROUP <> “PACKAGING”) 
    AND (LINE.DEPARTMENT = “DEPARTMENT B” OR LINE.DEPARTMENT = “DEPARTMENT A”) 

어디 절 두 번째를 제거하는 경우 : 여기에210

는 쿼리입니다.

+0

일에 참여하지 않나요을 ON HEADER.ID = LINE.HEADER_ID? – jakdep

+0

네, 죄송합니다. – Voj

답변

0

당신은 당신의 조건을 충족하는 모든 헤더를 찾을 하위 쿼리를 고려할 수 있습니다 (그리고 또한 DISTINCT 사용해야하는 것 또는 GROUP BY가 제거 중복 방지) :

SELECT * 
FROM HEADER 
WHERE Group NOT IN ('SERVICES', 'PACKAGING') 
    AND ID IN (SELECT Header_ID FROM LINE 
     WHERE DEPARTMENT IN ('DEPARTMENT M', 'DEPARTMENT B')) 
+0

올바른 방법입니다. 감사. – Voj

관련 문제