Правильный ли запрос и как переделать в LINQ
От: Grog13 Финляндия  
Дата: 29.05.09 13:45
Оценка:
Есть табличка T1

ID [PK]
SomeFields


и есть табличка T1_States
ID [PK],
TID [FK T1.ID],
State


Мне нужно выбрать из T1 все записи,
в истории состояний которых была бы хоть одна из следующий State IN (1,2,3,4,5),
но не было ни одного из состояний State NOT IN (8,9,10)

SELECT *
FROM T1
WHERE id IN
(
        SELECT DISTINCT TID
            FROM T1_States
            WHERE State IN (1,2,3,4,5)
)
AND
id NOT IN
(
        SELECT DISTINCT TID
            FROM T1_States
            WHERE State IN (6,7,8)
)


Насколько кривой это запрос и как его записать в LINQ виде?
Re: Правильный ли запрос и как переделать в LINQ
От: Ziaw Россия  
Дата: 01.06.09 06:39
Оценка:
Здравствуйте, Grog13, Вы писали:

distinct лишний, более оптимально сервер сможет выбрать план в таком запросе:
G>
G>SELECT *
G>FROM T1
G>WHERE id IN
G>(
G>        SELECT TID
G>            FROM T1_States
G>            WHERE State IN (1,2,3,4,5)
G>    MINUS
G>        SELECT TID
G>            FROM T1_States
G>            WHERE State IN (6,7,8)
G>)
G>


in также можно попробовать заменить на join.
Как linq генерирует минус я не знаю.
... << RSDN@Home 1.2.0 alpha 4 rev. 1176>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.