MySQL中的SQL查询包含数学比较

时间:2015-08-16 08:02:57

标签: mysql sql comparison-operators

我需要一个SQL,它以比较的方式使用表A中的(随机化)值从表B中查找值。表A值以随机方式生成。表B值以累积分布函数的方式排序。我们需要的是SQL将从表B中获得满足条件的第一行。

Table A:
+----+-------+
| ID | value |
+----+-------+
|  1 | 0.1234|
|  2 | 0.8923|
|  3 | 0.5221|
+----+-------+

Table B:
+----+-------+------+
| ID | value | name | 
+----+-------+------+
|  1 | 0.2000| Alpha|
|  2 | 0.5000| Beta |
|  3 | 0.7500| Gamma|
|  4 | 1.0000| Delta|
+----+-------+------+

Result should be:
+----+-------+------+
| ID | value | name |
+----+-------+------+
|  1 | 0.1234| Alpha|
|  2 | 0.8923| Delta|
|  3 | 0.5221| Gamma|
+----+-------+------+

值0.1234小于B的所有值,但Alpha具有最小值。

值0.8923小于1.000 - >德尔塔。

值0.5221小于0.7500和1.000但0.7500最小 - >伽马。

仅当表A具有一个值时,此查询才有效:

select value, name
from B
where (select value from A) < value;

任何想法如何使用全表A?

1 个答案:

答案 0 :(得分:1)

您可以使用子查询来获取所需的数据:

SELECT a.ID, a.value, 
    (SELECT b.name FROM TableB b WHERE a.value < b.value ORDER BY b.ID ASC LIMIT 1) as name
FROM TableA a

在这种情况下,对于表A中的每一行,您可以找到表B中的第一条记录,该列在value列中具有较大的数字。根据您的要求,运营商<可能会更新为<= - 这取决于您的要求