如何在WHERE LIKE中将SELECT语句用于多个值

时间:2018-07-28 17:08:19

标签: sql sql-server tsql sql-server-2016 sql-server-2017

我正在尝试从表中的行中过滤掉,其中[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%'等操作?

2 个答案:

答案 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;

test is here