Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 编辑SQL查询_Mysql_Sql - Fatal编程技术网

Mysql 编辑SQL查询

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

表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      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