多个AND / OR查询不能产生正确的结果

时间:2014-12-26 22:44:29

标签: sql sql-server-2012 conditional-statements

以下是样本数据:

FamID|Dad    |Mom    |Son    |
------------------------------
1    |John   |Mary   |Barry  |
2    |Bob    |Jane   |Donald |
3    |Sam    |Jessica|Sam Jr |
4|   |Jason  |Nancy  |Conway |
5    |Steve  |Sara   |JR     |
6    |John   |Bonnie |Ron    | 

以下是结果:

FamID|Dad    |Mom    |Son    |
------------------------------
1    |John   |Bonnie |Ron    |

以下是我正在做的事情的示例查询:

SELECT 
    * 
FROM 
    Family
WHERE
    (Dad != 'John' AND Mom != 'Mary')
    AND
    (Dad != 'Bob' AND Mom != 'Jane')
    AND
    (Dad != 'Sam' AND Mom != 'Jessica')
    AND 
    (Dad != 'Jason' AND Mom != 'Nancy')
    AND
    (Dad != 'Steve' AND Mom != 'Sara')`

此查询排除了不应排除的结果。我的语法错了吗?

2 个答案:

答案 0 :(得分:3)

以下是您需要的内容:

SELECT *
FROM   Family
WHERE  NOT ( 
             ( Dad = 'John'  AND Mom = 'Mary' )
          OR ( Dad = 'Bob'   AND Mom = 'Jane' )
          OR ( Dad = 'Sam'   AND Mom = 'Jessica' )
          OR ( Dad = 'Jason' AND Mom = 'Nancy' )
          OR ( Dad = 'Steve' AND Mom = 'Sara' ) 
           ) 

这在逻辑上与:

相同
SELECT *
FROM   Family
WHERE  (     
             ( Dad <> 'John'  OR Mom <> 'Mary' )
         AND ( Dad <> 'Bob'   OR Mom <> 'Jane' )
         AND ( Dad <> 'Sam'   OR Mom <> 'Jessica' )
         AND ( Dad <> 'Jason' OR Mom <> 'Nancy' )
         AND ( Dad <> 'Steve' OR Mom <> 'Sara' ) 
       ) 

答案 1 :(得分:0)

在你的where子句中,你排除了“john”,所以当然你不会得到你想要的东西。 除了以错误的方式获取数据之外,您还必须依赖familyID。 假设你的桌子上有成千上万的记录,你会增加千条条件!!这是一周。 永远不要依赖文本总是尝试使用id。