2015-08-16 47 views
1

我需要一個SQL,以比較的方式使用(隨機化)表A中的值來查找表B中的值。表A的數值已經以隨機方式產生。表B的數值已經以累積分佈函數的方式排序。所需要的是SQL將從表B中獲得滿足條件的第一行。包含數學比較的MySQL中的SQL查詢

 
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 - > Delta。

值0.5221小於0.7500和1.000,但0.7500最小 - > Gamma。

這個查詢只能如果表A有一個值:

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

任何想法如何讓全表A中這項工作?

回答

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列數較多的第一個記錄每一行。根據您的要求操作<可能齋進行更新,以<= - 這取決於你的需求

+0

使用限制在MySQL .. – amdixon

+0

@amdixon謝謝你,我忘了在MySQL – dotnetom

+0

不支持TOP這就像一個魅力。謝謝! – Parallax