Сложный JOIN

whitebeast
Дата: 13.06.2011 17:16:49
Приветствую,

Возникли некоторые сложности с запросом...

При запуске процедуры передается параметр в виде строки, содержащий HotelID и разделители.
Далее эта строка парсится в таблицу @t.
Далее эта таблица джоинится с целевой таблицей Table.

Условия выборки: если ID один - допускается выводить строки с хотя бы одним совпадением.
Если ID два и более - выводятся строки у которых два и более совпадений, т.е. N ID = N совпадений.

Вопрос: как реализовать второе условие?

Спасибо!
kDnZP
Дата: 13.06.2011 17:24:19
whitebeast, ознакомтесь: Рекомендации по оформлению сообщений в форуме. Потому как из написанного вами - нифига не понятно, кроме того что парсите строку с ийдишниками.
whitebeast
Дата: 13.06.2011 17:44:56
kDnZP, с рекомендациями знаком.
Извиняюсь, что не указал версию сервера MS SQL 2005.
Как придумать более понятную тему - увы не знаю.

Добавлю используемый запрос (подходит к первому условию, но не подходит ко второму):
select  * 
from    dbo.Hotel h
join     @tRooms tr
    on  tr.HotelID= р.HotelID

Примеры:
Условие 1:
Строка с HotelID: " 111 "
Таблица Hotel:
ID  HotelID
1   111
1   0
2   123
3   111
Нужны записи с ID 1 и 3

Условие 2:
Строка с HotelID: " 111; 222 "
ID  HotelID
1   111
1   222
2   123
3   111
4   222
Нужна запись с ID 1 ( а не 1,3,4 с моим запросом)

Задам вопрос по другому: как должен выглядеть запрос, чтобы он удовлетворял двум условиям?
kDnZP
Дата: 13.06.2011 18:55:39
whitebeast, че-то фигово вы рекомендации читаете... Могли бы скрипты самостоятельно подготовить...
Проверяйте:
DECLARE @table TABLE ( id INT, HotelID INT )
INSERT  INTO @table
        ( id ,
          HotelID
        )
        SELECT  1 ,
                111
        UNION ALL
        SELECT  1 ,
                222
        UNION ALL
        SELECT  2 ,
                123
        UNION ALL
        SELECT  3 ,
                111
        UNION ALL
        SELECT  4 ,
                222

DECLARE @flt TABLE ( HotelID INT )
INSERT  INTO @flt
        SELECT  111
        UNION ALL
        SELECT  222

SELECT  t.id
FROM    @table t
        JOIN @flt f ON t.HotelID = f.HotelID
GROUP BY t.id
HAVING (SELECT COUNT(*) FROM @flt)=COUNT(t.id)
whitebeast
Дата: 13.06.2011 19:00:35
kDnZP, все оказалось намного проще чем я ожидал! Спасибо!

Впредь постараюсь следовать рекомендациям.