【问题标题】:How to use NOT IN with LIKE in a search function?如何在搜索功能中使用 NOT IN 和 LIKE?
【发布时间】:2021-03-16 19:28:36
【问题描述】:

我有一个包含产品名称的表格。我排除了另一个表中的那些。

SELECT ID_Produto, NomeProduto 
FROM tbl_produtos 
where ID_Produto Not IN (Select ID_Produto from tbl_produtos_parceiros)
order by NomeProduto

结果符合预期。

在同一个表单中,我有一个搜索功能。我尝试了同样的条件,NOT IN:

SELECT * 
FROM   tbl_produtos 
WHERE  id_produto LIKE '%ALH%' 
        OR nomeproduto LIKE '%ALH%' 
        OR responsavel LIKE '%ALH%' 
        OR precovenda LIKE '%ALH%' 
           AND id_produto NOT IN (SELECT id_produto 
                                  FROM   tbl_produtos_parceiros); 

仍然带来产品“Alho”,它在 tbl_produtos_parceiros 上。

【问题讨论】:

    标签: sql excel vba ms-access where-clause


    【解决方案1】:

    ORed 条件周围需要括号:

    SELECT * 
    FROM   tbl_produtos 
    WHERE  
        (
               id_produto  LIKE '%ALH%' 
            OR nomeproduto LIKE '%ALH%' 
            OR responsavel LIKE '%ALH%' 
            OR precovenda  LIKE '%ALH%' 
        )
        AND id_produto NOT IN (SELECT id_produto FROM tbl_produtos_parceiros); 
    

    为什么需要这个是因为OR 的逻辑优先级低于AND。没有括号,您的查询相当于:

    SELECT * 
    FROM   tbl_produtos 
    WHERE  
           id_produto  LIKE '%ALH%' 
        OR nomeproduto LIKE '%ALH%' 
        OR responsavel LIKE '%ALH%' 
        OR (
            precovenda  LIKE '%ALH%' 
            AND id_produto NOT IN (SELECT id_produto FROM tbl_produtos_parceiros)
        ); 
    

    【讨论】:

    • 完美!谢谢!
    • 欢迎@FabioGomes。如果我的回答正确地回答了您的问题,请点击复选标志accept it...谢谢。
    【解决方案2】:

    如果这是 MS Access,您需要修复通配符和字符串分隔符以及语法。我也推荐NOT EXISTS

    SELECT p.* 
    FROM tbl_produtos as p
    WHERE (id_produto LIKE "*ALH*" OR
           nomeproduto LIKE "*ALH*" OR
           responsavel LIKE "*ALH*" OR
           precovenda LIKE "*ALH*" 
          ) AND 
          NOT EXISTS (SELECT 1
                      FROM tbl_produtos_parceiros as pp
                      WHERE pp.id_produto = p.id_produto
                     ); 
    

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多