从查询中过滤空值

Ani*_*pos 4 mysql

在下面的查询中,我只想看到风险列中没有 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 的。

Teh*_*ike 5

您应该能够使用 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)