我正在尝试从表中的行中过滤掉,其中[Description]
列包括另一个表中的列表中的单词。
我已经走了很远,然后才意识到我根本不知道该怎么做:
SELECT
p.Description --- a large amount of text
FROM
Products p
WHERE
p.Description NOT LIKE
(SELECT List.Word FROM List) --- pseudo code
所以我需要类似于NOT IN
的东西,但实际上是NOT LIKE
。
是否有可能无需我手动提取列表中的所有单词并进行NOT LIKE '%sofa%' AND NOT LIKE '%cushion%' AND NOT LIKE '%chair%'
等操作?
答案 0 :(得分:7)
您可以检查list
中是否不存在任何行,其中description
类似于该行的word
。
SELECT p.description
FROM products p
WHERE NOT EXISTS (SELECT *
FROM list l
WHERE p.description LIKE '%' + l.word + '%');
答案 1 :(得分:2)
除了已发布的解决方案之外,您还可以使用以下变体:
SELECT p.Description
FROM Products p
LEFT JOIN (SELECT Test = '%'+Word+'%' FROM List) AS c
ON p.Description LIKE c.Test
WHERE c.Test IS NULL;