2014-09-03 2 views
0

Я пытаюсь реализовать небольшую логику в SQL:Looping с операторами 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 и проверьте, находится ли значение между диапазоном значений в Qnt таблицы B и получите соответствующее значение.

Я знаю, как я мог достичь этого, используя цикл 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? Они * не * одно и то же. –

+0

Ну, мне не нужен сценарий. В основном мне просто нужна логика о том, как я могу это решить с помощью SQL-инструкций. Все, что угодно, должно быть прекрасным. –

+1

Которые могут отличаться в зависимости от поставщика. Я удаляю определенные теги, так как вы ищете общее решение. –

ответ

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; 
Смежные вопросы