我正在尝试选择包含不完整数据列的行。在这种情况下,不完整的列的值小于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)
此语句返回多行数据,因此语义必须不正确。没有括号,我得到同样的东西。
答案 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)
)