在下面的查询中,我想在CASE的WHEN和before中添加一个AND条件,这可能吗?
例如,当'r‘和’table1.name=‘为’jones‘时,则为'very high’。
SELECT table1.id, table1.name,
CASE table1.event
WHEN 'r' THEN 'very high'
WHEN 't' 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发布于 2011-09-04 02:10:15
你可以像这样重写你的语句来完成你想要的
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请注意,您需要删除CASE语句后面的table1.event。documentation here
发布于 2011-09-04 02:08:38
任何计算结果为布尔值(true或false)的内容都可以包含在CASE语句的WHEN条件中。因此,您可以将'r'替换为:
('r' AND table1.name='jones')
再想一想,在CASE之后,你可能不得不丢掉table1.event
SELECT table1.id, table1.name,
CASE
WHEN (table1.event = 'r' AND table1.name='Jones') THEN 'very high'
WHEN table1.event = 't' 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发布于 2011-09-04 02:11:03
从case <column> when <value> then ...切换到case when <condition> then ...
CASE
WHEN table1.event = 'r' AND table1.active = 1 THEN 'very high'
...https://stackoverflow.com/questions/7294890
复制相似问题