7

私は論理的な問題を抱えて座っていて、ますます混乱しています。

例の表

ID | お客様 ID | タスク | 確認済み | キャンセル | 完了

1 | 20 | テキスト | 1 | 0 | 0
2 | 20 | テキスト | 1 | 1 | 0
3 | 20 | テキスト | 1 | 0 | 1
4 | 17 | テキスト | 0 | 1 | 0
5 | 17 | テキスト | 1 | 0 | 0
6 | 20 | テキスト | 1 | ヌル | ヌル
7 | 20 | テキスト | 0 | 1 | ヌル

custID = 20 のすべてのタスクを選択したいのですが、confirmed=1 です。タスクが取り消された = 1 または完了 = 1 の場合、レコードは返されません。

この場合、返される行は 1 と 6 になります。

これまでの私のクエリは

SELECT *
FROM table1
WHERE    
 (CustID = 20 AND Confirmed = 1 AND Cancelled <> 1 AND Completed <> 1) OR
 (CustID = 20 AND Confirmed = 1 AND Cancelled = 1 AND Completed <> 1) OR
 (CustID = 20 AND Confirmed = 1 AND Cancelled <> 1 AND Completed = 1)

どんな助けでも大歓迎です。

4

3 に答える 3

21

これを次のように簡略化できます。

SELECT * FROM table1
WHERE CustID = 20
  AND Confirmed = 1
  AND (Cancelled <> 1 OR Cancelled IS NULL)
  AND (Completed <> 1 OR Completed IS NULL)

実数値をNULLと比較するときは、等式と不等式の両方でそれらが除外されるため、注意する必要があります(非常に明示的です)。

于 2012-08-23T08:59:29.473 に答える
3
SELECT *
FROM table1
WHERE    
    CustID = 20 AND Confirmed = 1 AND NOT (Cancelled = 1 OR Completed = 1)  
于 2012-08-23T08:59:40.990 に答える
-2
SELECT * FROM thk_basvuru WHERE thk_status in (8,23,33) or thk_olo_status not in (4,6,9,11,12)
于 2014-02-04T08:59:36.767 に答える