跳至內容
Astera Technology

WHERE kind=1 OR 2 為何包括所有種類?

用比較清單,不把非零數字獨立當條件。

下載完整個案資料及參考答案 ↓

準備報表輸入

本例只選種類 1、2。SQLite 布林運算把獨立 2 視為真,OR 2 便每行都過,未知種類也過。IN(1,2) 才是所需比較。

以下記錄及報表規則均為原創假設。在新 SQLite 測試資料庫重做建表,預覽包含此小型例子每張表。

假設輸入:records
編號種類代碼
A1
B2
C3
DNULL(未知或沒有)
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE records(id TEXT PRIMARY KEY,kind INTEGER); INSERT INTO records VALUES('A',1),('B',2),('C',3),('D',NULL);

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT id,kind FROM records WHERE kind=1 OR 2 ORDER BY id;
錯誤查詢的逐行結果
編號種類代碼
A1
B2
C3
DNULL(未知或沒有)
下載可編輯 CSV ↓
更正 SELECT
SELECT id,kind FROM records WHERE kind IN(1,2) ORDER BY id;
更正查詢的逐行結果
編號種類代碼
A1
B2
下載可編輯 CSV ↓

錯誤結果有 C=3、D=NULL,更正只留 A=1、B=2;未知被剔除不代表改成某已知種類。

用新副本測邊界

C 由 3 改 2,才因真正值相符而入結果。

另開新資料庫重做原建表,才套下列改動及更正查詢。空結果在表內用已標明空結果文字表示,不是假資料行。

邊界改動及更正查詢
UPDATE records SET kind=2 WHERE id='C';
SELECT id,kind FROM records WHERE kind IN(1,2) ORDER BY id;
邊界查詢的逐行結果
編號種類代碼
A1
B2
C2
下載可編輯 CSV ↓

更正篩選會收未知種類 D 嗎?

查看參考答案

不收,只限明確 1、2;邊界更正後 A、B、C 在,D 不在。

相關資源