带有OR和AND<的SQL语句1

时间:2013-08-29 01:11:48

标签: mysql sql

我正在尝试选择包含不完整数据列的行。在这种情况下,不完整的列的值小于1.我试图找到至少有一个不完整列的行,但我不确定如何将它组合成一个SQL语句。这是我一直尝试失败的原因:

SELECT 
  id 
FROM 
  eval 
WHERE 
  (month = :month) and (uid=:uid) 
OR (rotation < 1) 
OR (mr < 1) 
OR (nc < 1) 
OR (clinic_days < 1) 
OR (clinic_pts < 1) 
OR (mksap < 1)

此语句返回多行数据,因此语义必须不正确。没有括号,我得到同样的东西。

3 个答案:

答案 0 :(得分:4)

在SQL中AND优先于OR,就像乘法优先于加法一样,所以你需要使用括号来强制你想要的优先级:

SELECT id
FROM eval
WHERE (month = :month)
   AND 
       (uid=:uid)
   AND (
       (rotation < 1)
    OR (mr < 1)
    OR (nc < 1)
    OR (clinic_days < 1)
    OR (clinic_pts < 1)
    OR (mksap < 1)
    )

您的原始语句将采用OR的长链,并返回与其任何单独条件匹配的所有内容,以及具有所需行:uid:month的行。

答案 1 :(得分:1)

您需要修复逻辑。我想你需要在and之前or以及括号:

SELECT id
FROM eval
WHERE (month = :month) and (uid=:uid) AND
      ( (rotation < 1) OR (mr < 1) OR (nc < 1) OR (clinic_days < 1) OR
         (clinic_pts < 1) OR (mksap < 1) )

答案 2 :(得分:0)

你试过这个吗?

SELECT id 
FROM eval 
WHERE (month = :month) 
and (uid=:uid) 
And( 
  (rotation < 1) 
   OR (mr < 1) 
   OR (nc < 1) 
   OR (clinic_days < 1)
   OR (clinic_pts < 1) 
   OR (mksap <1) 

)