Mysql 从查询中筛选空值
在下面的查询中,我只想看到风险列中没有空值的行Mysql 从查询中筛选空值,mysql,Mysql,在下面的查询中,我只想看到风险列中没有空值的行 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 W
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
我想去掉空的
SELECT id, name, risk FROM (
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
) T
WHERE risk IS NOT NULL
更新:我刚刚意识到这是MySQL,而不是一般的SQL问题,所以我不能100%确定MySQL支持这个子查询语法。因此,MySQL方法:
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
AND table2.risk IS NOT NULL
ORDER BY table2.value DESC LIMIT 1)
END AS risk
FROM table1
ORDER BY FIELD( table1.event, 'r', 'f', 't' ), table1.value DESC
因此,筛选是在前面完成的,这可能会使用索引,尽管一个好的优化器会将第一个查询转移到第二个查询。您应该能够使用HAVING子句筛选出这些行: 选择table1.id、table1.name、, 案例 当table1.event='r'和table1.name='jones'时,则为'very high' 当table1.event='t'和table1.name='smith'时,则为'very low' 其他的 选择表2.2风险
在表2中,我检查了查询,但没有得到正确的结果,而是得到了可重复的行。我用原始查询的结果更新问题。
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
AND table2.risk IS NOT NULL
ORDER BY table2.value DESC LIMIT 1)
END AS risk
FROM table1
ORDER BY FIELD( table1.event, 'r', 'f', 't' ), table1.value DESC
SELECT * FROM user where name=""