У меня есть две таблицы Card
и History
с отношением «один ко многим»: одна карта может иметь одну или несколько историй. Card
имеет столбец CardId
, а History
имеет CardId
и столбец StatusId
.SQL Server NOT EXISTS эффективность
Мне нужен скрипт SQL, который выбирает единственные карты, у которых нет истории с StatusId = 310.
Это то, что я пробовал.
SELECT
C.CardId
FROM
Card C
WHERE NOT EXISTS (SELECT *
FROM History H
WHERE H.CardId = C.CardId AND H.StatusId = 310)
Но я хочу знать, есть ли эффективный способ.
Заранее спасибо.
Почему вы хотите использовать 'GROUP BY' для этого? 'WHERE NOT EXISTS' будет наиболее логичным для использования. – Siyual
Все, что мне нужно, это знать, есть ли более эффективный способ. –
Я бы написал это же (я прочитал необоснованные утверждения о том, что 'select null' в' where [not] exists' немного более результативен). Если этот запрос не работает, как вы хотели бы, посмотрите на план выполнения. – HoneyBadger