0

データが不完全な列を含む行を選択しようとしています。この場合、不完全な列の値は 1 未満です。少なくとも 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 に答える