我有两个表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以便按风险排序上述结果?
答案 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