2017-04-11 105 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
    • DEPARTMENT中号

下面是该查询:

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”) 

它的工作,如果你删除第二个WHERE子句。

+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