0

我正在尝试选择具有不完整数据列的行。在这种情况下,不完整列的值小于 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)

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

4

3 回答 3

4

在 SQLAND中优先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)
    )

您的原始语句将采用ORs 的长链,并返回与其任何单个条件匹配的所有内容,以及具有欲望:uid和的行:month

于 2013-08-29T01:15:16.793 回答
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) )
于 2013-08-29T01:14:50.287 回答
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) 

)
于 2013-08-29T01:16:05.307 回答