SQL根据固定值使用新列值进行查询

时间:2011-08-31 20:32:10

标签: mysql sql phpmyadmin

我有两个表table1和table2

table1有列:

id name  value
1  name1 0.5
2  name2 1.9
3  name3 2.6
4  name4 0.2
....
999 name999 4.7

table2有列

id risk   value
1  low    0.5
2  medium 1.5
3  high   2.5

我想创建一个结果,例如:(低> = 0.5和< 1.5,中> = 1.5和< 2.5,高> 2.5),从更高的值到更小的值

1  name999 high
2  name3 high
3  name2 medium
4  name1 low

加成

另一个问题:

table1有列:

id name  value
1  name1 0.5
2  name2 1.9
3  name3 2.6
4  name4 0.2
....
999 name999 4.7


假设在列名中我们有test1和test2,我们希望test1的结果总是非常低,而test2非常高。那么sql修改会得到什么结果?

1  test2   very high
2  name999 high
3  name3 high
4  name2 medium
5  name1 low
6  test1 very low


我们是否还需要编辑table2以便按风险排序上述结果?

2 个答案:

答案 0 :(得分:1)

如果指定table2中的上限和下限而不是尝试执行某种最接近的数字查找,这将更容易。它可以像

一样简单
SELECT a.name, b.risk FROM table1 a
LEFT JOIN table2 b ON a.value BETWEEN b.lower AND b.upper

如果你坚持使用最接近的数字查找,你可以通过写一个包含ABS(a.value - b.value)的选择,按该字段排序并选择前1来确定table1中哪个值最接近table2,但是没有在那一点上简单的方法来进行连接。您可能会在光标内从临时表中插入记录,从临时表中选择然后删除它 - 只需对第二个表进行一次小的更改就可以避免这种麻烦。

答案 1 :(得分:1)

SELECT a,id
     , a.name
     , b.risk 
FROM table1 AS a
  JOIN table2 AS b
    ON b.value = ( SELECT MAX(bm.value)
                   FROM table2 AS bm
                   WHERE bm.value <= a.value
                 )
ORDER BY a.value DESC