如何在 WHERE LIKE 中对多个值使用 SELECT 语句
How to use a SELECT statement in WHERE LIKE for multiple values
我正在尝试过滤掉 table 中的行,其中 [Description]
列包含另一个 table 中列表中的单词。
我已经走到这一步,然后意识到我根本不知道该怎么做:
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%'
等等吗?
您可以检查 list
中是否不存在任何行,其中 description
类似于该行的 word
。
SELECT p.description
FROM products p
WHERE NOT EXISTS (SELECT *
FROM list l
WHERE p.description LIKE '%' + l.word + '%');
除了已发布的解决方案,您还可以使用以下变体:
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;
我正在尝试过滤掉 table 中的行,其中 [Description]
列包含另一个 table 中列表中的单词。
我已经走到这一步,然后意识到我根本不知道该怎么做:
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%'
等等吗?
您可以检查 list
中是否不存在任何行,其中 description
类似于该行的 word
。
SELECT p.description
FROM products p
WHERE NOT EXISTS (SELECT *
FROM list l
WHERE p.description LIKE '%' + l.word + '%');
除了已发布的解决方案,您还可以使用以下变体:
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;