在下面的查询中,我只想看到风险列中没有 NULL 值的行
SELECT table1.id, table1.name,
CASE
WHEN table1.event = 'r' AND table1.name = 'jones' THEN 'very high'
WHEN table1.event = 't' AND table1.name = 'smith' THEN 'very low'
ELSE (SELECT table2.risk FROM table2 WHERE table2.value <= table1.value
ORDER BY table2.value DESC LIMIT 1)
END AS risk
FROM table1
ORDER BY FIELD( table1.event, 'r', 'f', 't' ), table1.value DESC
Run Code Online (Sandbox Code Playgroud)
谢谢。
上面查询的结果是:
id name risk
17 name very low
17 name NULL
18 qwert yuiop very low
18 qwert yuiop NULL
19 qwert yuiop very low
19 qwert yuiop NULL
20 qwert yuiop very low
20 qwert yuiop NULL
21 qwert yuiop very low
21 qwert yuiop NULL
22 q very low
22 q NULL
23 q very low
23 q NULL
24 q very low
24 q NULL
25 q very low
25 q NULL
26 q very low
26 q NULL
Run Code Online (Sandbox Code Playgroud)
我想摆脱 NULL 的。
您应该能够使用 HAVING 子句过滤掉这些行:
SELECT table1.id, table1.name,
CASE
WHEN table1.event = 'r' AND table1.name = 'jones' THEN 'very high'
WHEN table1.event = 't' AND table1.name = 'smith' THEN 'very low'
ELSE (
SELECT table2.risk
FROM table2 WHERE table2.value <= table1.value
ORDER BY table2.value DESC
LIMIT 1
)
END AS risk
FROM table1
-- Add this row:
HAVING risk IS NOT NULL
ORDER BY FIELD( table1.event, 'r', 'f', 't' ), table1.value DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6885 次 |
| 最近记录: |