Фильтрация записей по группам полей - PullRequest
1 голос
/ 15 марта 2011

Вот в чем дело - мне нужно фильтровать записи по группам полей. Прототип будет выглядеть так:

select distinct ID, Name from Item i 
inner join (select ItemID from ItemD where ItemDID in (146,147)) idd1 on i.ItemID = idd1.ItemID 
inner join (select ItemID from ItemD where ItemDID in (7641, 7648)) idd2 on i.ItemID = idd2.ItemID 

(повторите внутреннее соединение еще пару раз)

Я знаю, что могу создать хранимую процедуру, которая использует sp_executesql, и передать ей эти внутренние объединения из моего приложения, но я не могу не задаться вопросом, есть ли лучшее решение?

1 Ответ

2 голосов
/ 15 марта 2011

Вы можете использовать временную таблицу, вероятно, быстрее, чем множество объединений:

Conditions:  GroupID, ItemDID 

И заполнить ее следующим образом:

1, 146
1, 147
2, 7641
2, 7648

Затем потребуйте, чтобы каждая группа условий была удовлетворена:

select  ID
,       Name
from    Item i
where   not exists
        (
        select  *
        from    Conditions c
        left join    
                ItemID idd
        on      idd.ItemDID = c.ItemDID
                and idd.ItemID = i.ItemID
        group by
                c.GroupID
        having  count(idd.ItemDTD) = 0
        )

(Запрос не проверен; существует много вариантов.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...