Запрос. Не знаю как сделать.

paodzian
Дата: 15.01.2009 15:07:35
Привет.

Есть две таблицы:

первая
tab_f
______________
num | quantity
----------------
1 | 2
----------------
2 | 3
----------------
3 | 1
______________

вторая
tab_s
______________
num | element
----------------
1 | a
----------------
1 | b
----------------
1 | h
----------------
2 | t
----------------
2 | z
----------------
3 | a
----------------
3 | c
----------------
3 | z
______________


Мне нужно получить столько строки со значением num, столько раз какое значение quantity и при условии что в поле element есть значения a, b, c.

Результат должен быть таким:
res
______________
num | quantity
----------------
1 | 2
----------------
1 | 2
----------------
3 | 1
______________
Козьма Прутков
Дата: 15.01.2009 15:16:11
paodzian,

select num, quantity
from tab_f f
  join tab_s s on f.num = s.num
where s.element in ('a', 'b', 'c')

В постановке есть неточность: элемент 3 должен появиться 2 раза по аналогии с элементом 1.
paodzian
Дата: 15.01.2009 15:19:00
Я делаю примерно такой запрос:

select f.num
from tab_f as f
inner join master.dbo.spt_values as val on val.type = 'P' and val.number < f.quantity

Но вот как сделать чтобы не выводились те f.num, для которых значения tab_s.element не равны a, b, c?
paodzian
Дата: 15.01.2009 15:22:30
В постановке нет неточности. (В постановке есть неточность: элемент 3 должен появиться 2 раза по аналогии с элементом 1.)

quantity для num 1 равно 2, а для num 3 равно 1.
Козьма Прутков
Дата: 15.01.2009 15:43:47
paodzian,

ааа, вон оно что. тогда мой запрос не решает задачу. Тогда доделать исходный так:
select f.num 
from tab_f as f
inner join master.dbo.spt_values as val on val.type = 'P' and val.number < f.quantity
where exists(select 1 from tab_s where num = f.num and element in ('a', 'b', 'c'))
paodzian
Дата: 15.01.2009 15:57:21
Спасибо.

Работает.

Немножко не так сделал. Потому что у меня побольше таблиц есть, но Вы мне подбросили идею.