MySQL-在WHERE條件使用IF


金額表Money
流水號時限(Deadline)等級(Level)金額一(One)金額二(Two)金額三(Three)
12017/12/311000050100150
22017/12/3120000100200300
32017/12/3130000150300450
4NULL10000100200300
5NULL20000200400600
6NULL30000300600900
7NULL400004008001200


查詢同時符合以下條件
(1) 日期2017/12/19,查詢結果為→時限2017/12/31的資料。
(2) 日期2018/01/01,查詢結果為→時限為NULL的資料。

Try 1

測試2017-12-19查詢,用OR無法得到想要的結果。
-- MySQL
SELECT * FROM Money
WHERE (Deadline >= '2017-12-19' OR Deadline IS NULL)
GROUP BY Level
結果會讓流水號7也跑出來
流水號時限(Deadline)等級(Level)金額一(One)金額二(Two)金額三(Three)
12017/12/311000050100150
22017/12/3120000100200300
32017/12/3130000150300450
7NULL400004008001200


Try 2,在WHERE裡使用IF和子查詢

測試2017-12-19查詢
-- MySQL 測試2017-12-19查詢
SELECT * FROM Money
WHERE IF( (SELECT sub_m.Deadline FROM Money AS sub_m WHERE sub_m.Deadline>='2017-12-19' LIMIT 1) IS NULL, 
 Deadline IS NULL,
 Deadline>='2017-12-19')
ORDER BY Level ASC
結果:
流水號時限等級金額一金額二金額三
12017/12/311000050100150
22017/12/3120000100200300
32017/12/3130000150300450


測試2018-01-01查詢
-- MySQL 測試2018-01-01查詢
SELECT * FROM Money
WHERE IF( (SELECT sub_m.Deadline FROM Money AS sub_m WHERE sub_m.Deadline>='2018-01-01' LIMIT 1) IS NULL, 
 Deadline IS NULL,
 Deadline>='2018-01-01')
ORDER BY Level ASC
結果:
流水號時限等級金額一金額二金額三
4NULL10000100200300
5NULL20000200400600
6NULL30000300600900
7NULL400004008001200


沒有留言:

張貼留言