2017-04-11 11 views
2

最初の条件は無視されていました。SQL Server:where句が無視されています

サンプルテーブルとレコード。

ヘッダーテーブル:

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. 私はこれらの次のグループを持っているすべてのヘッダーが表示されないようにしたい

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

    テーブルラインクエリ内にあります。

    • SERVICES
    • 包装
  2. そしてまた、私は、その行はこれらの次の部門にあるすべてのヘッダたい:
    • DEPARTMENTのB
    • DEPARTMENT 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”) 

2番目の句を削除する場合、それが働いています。

+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

関連する問題