Mysql 编辑SQL查询
表1包含以下列:Mysql 编辑SQL查询,mysql,sql,Mysql,Sql,表1包含以下列: id name value event 1 name1 0.5 f 2 name2 1.9 f 3 name3 2.6 f 4 name4 0.2 f 5 name5 0 r 6 name6 text r 7 name7 text2 t 8 name8 5 t .... 999 name999 4.7 f 表2有两列 id risk value 1 very low 0 1 low
id name value event
1 name1 0.5 f
2 name2 1.9 f
3 name3 2.6 f
4 name4 0.2 f
5 name5 0 r
6 name6 text r
7 name7 text2 t
8 name8 5 t
....
999 name999 4.7 f
表2有两列
id risk value
1 very low 0
1 low 0.5
2 medium 1.5
3 high 2.5
4 very high 3
结果:
1 name5 very high
2 name6 very high
3 name999 high
4 name3 high
5 name2 medium
6 name1 low
7 name7 very low
8 name8 very low
到目前为止,查询中没有r和t事件给出非常高和非常低的is:
SELECT table1.id
, table1.event
, table2.risk
FROM table1
JOIN table2
ON table2.value = ( SELECT MAX(table2.value)
FROM table2
WHERE table2.value <= table1.value
)
ORDER BY table1.value DESC
试试这个,它在SQLServer2008中工作,应该非常接近mySQL中所需要的
select t1.*,coalesce(a.risk,b.risk,c.risk) as risk
from t1
left join
( select risk from t2 where id = (SELECT MAX(t2.value)
FROM t2,t1 WHERE t2.value <= t1.value))
a on t1.event='f'
left join t2 b on t1.event='r' and b.id=5
left join t2 c on t1.event='t' and c.id=1
order by t1.value desc
你想要实现什么?从您的示例中不清楚。为什么在表1中的十进制“值”列中有文本值?如果有,应如何处理?你能不能也写下你希望结果表是如何计算的?不清楚为什么'name5'应该与'very high'和id 1配对,例如。这很糟糕,因为它是。。。IDK这整件事会有什么好处,但我建议重新开始,重新思考一下,如果你想要一个像样的数据库来支持它的话。@howard。我想知道,如果事件是f,那么从表2中得到风险。否则,如果事件是r,则获取非常高的值无关紧要。否则,如果事件不是r,则获取非常低的值无关紧要too@Gus在表2中,“非常低”和“非常高”的出现只是为了帮助对结果描述进行排序。因为“值”列是从文本框中获取其值的,所以它的默认值是文本。Name5应该与非常高的值配对,因为表1中的事件是rfor event f,我得到的都是NULL的everywhere,我怀疑mySQL没有正确处理值的比较。试着自己运行内部查询,看看会返回什么…In r event是正确的非常高,但我需要t event是非常低而不是非常高。@aniso编辑以添加“t”事件条件。1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在第行“medical.event='r'和“very high”ELSEIF medical.event='t'附近使用的正确语法2@aniso哦对不起,我经常混合不同的语言!更正。
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