Есть табличка 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 виде?
Здравствуйте, 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>>