Во-первых, эти слова попадают в SSMS - вы можете построить производную таблицу, используя UNION ALL:
SELECT 'Lawnmower' AS word
UNION ALL
SELECT 'Weedwacker'
UNION ALL
SELECT 'Batmobile'
Будет возвращена таблица с одним столбцом с именем «word»:
word
--------
Lawnmower
Weedwacker
Batmobile
Протест
Вам нужно будет избегать любых одинарных кавычек в ваших данных. IE: O'Brian нужно заменить на O''Brian - просто удвойте одинарную кавычку, чтобы избежать ее.
Теперь к реальному запросу ...
Использование NOT IN
Некоторые базы данных ограничивают количество предложений в IN, где-то в тысячах IIRC, поэтому NOT EXISTS
или LEFT JOIN/IS NULL
могут быть лучшими альтернативами.
SELECT p.*
FROM PRODUCT p
WHERE p.productname NOT IN (SELECT 'Lawnmower' AS word
UNION ALL
SELECT 'Weedwacker'
UNION ALL
SELECT 'Batmobile'
...)
Использование NOT EXISTS
SELECT p.*
FROM PRODUCT p
WHERE NOT EXISTS (SELECT NULL
FROM (SELECT 'Lawnmower' AS word
UNION ALL
SELECT 'Weedwacker'
UNION ALL
SELECT 'Batmobile'
...) x
WHERE x.word = p.productname)
Использование LEFT JOIN / IS NULL
SELECT p.*
FROM PRODUCT p
LEFT JOIN (SELECT 'Lawnmower' AS word
UNION ALL
SELECT 'Weedwacker'
UNION ALL
SELECT 'Batmobile'
...) x ON x.word = p.productname
WHERE x.word IS NULL
Какой самый эффективный / самый быстрый?
Если сравниваемые столбцы не обнуляются, NOT IN или NOT EXIST - лучший выбор .