2014-09-03 131 views
0

我想在SQL实现小型逻辑:使用SQL语句循环

例如:我有两个表A和B

A   B 
ID Qnt   ID Qnt Value 
1 50   1 100 1000  
2 130   2 200 1000 
3 180   3 300 1000 
4 320   4 400 2000 
5 500   5 500 2000 
       6 600 2000 
       7 700 2000 

我想通过在QNT的每个值环表A并检查该值是否在表B的Qnt中的值的范围之间并且获得相应的值。

我知道如何使用While循环来实现这一点。但我不想这样做,因为循环会显着影响我的查询性能。我只想用SQL语句来做到这一点。 任何人都可以提出一个想法,我可以如何去与此?只是一个想法会很棒!任何SQL都可以,我只想知道逻辑。

输出将如下所示:

Output 
ID  Qnt  Value 
1  50  1000 
2  130  1000 
3  180  1000 
4  320  2000 
5  500  2000 

感谢

+1

你使用MySQL?还是SQL Server?它们不是同一件事。 – 2014-09-03 14:00:15

+0

那么,我不需要脚本。基本上我只需要关于如何用SQL语句解决这个问题的逻辑。任何事情都可以被忽略。 – 2014-09-03 14:01:16

+1

这可能因供应商而异。由于您正在寻找通用解决方案,因此我将删除特定标签。 – 2014-09-03 14:02:04

回答

6

这是一个查找。尽管两个数据库中的语法稍有不同,但可以使用相关子查询来完成。这是MySQL的版本:

select a.*, 
     (select b.value 
     from b 
     where b.qnt <= a.qnt 
     order by b.qnt desc 
     limit 1 
     ) as value 
from a; 

这里是SQL Server版本:

select a.*, 
     (select top 1 b.value 
     from b 
     where b.qnt <= a.qnt 
     order by b.qnt desc 
     ) as value 
from a;