如何在WHERE LIKE中为多个值使用SELECT语句

vol*_*one 3 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)

所以我需要类似的东西,NOT IN但实际上却是NOT LIKE.

如果没有我必须手动提取列表中的所有单词并执行NOT LIKE '%sofa%' AND NOT LIKE '%cushion%' AND NOT LIKE '%chair%'等等,这是否可能?

sti*_*bit 7

您可以检查是否存在行list,其中的行与该行的行description相似word.

SELECT p.description
       FROM products p
       WHERE NOT EXISTS (SELECT *
                                FROM list l
                                WHERE p.description LIKE '%' + l.word + '%');
Run Code Online (Sandbox Code Playgroud)

  • 它可能不会很好地扩展,因为索引对像这样的查询没什么帮助.也许还要查看数据库的全文索引选项? (3认同)