我需要一个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?
答案 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
列中具有较大的数字。根据您的要求,运营商<
可能会更新为<=
- 这取决于您的要求