【问题标题】:SQL query: Where and like statmentsSQL 查询:Where 和 like 语句
【发布时间】:2020-01-15 13:40:37
【问题描述】:

我正在尝试进行查询以获取其中一列中有 null 的结果,但由于某种原因,当我使用 like 时,我排除非 null 字段的部分不起作用

SELECT * FROM my_column WHERE title LIKE "%hea%" OR department LIKE "%hea%" OR title_pt LIKE "%hea%" AND deleted_at IS NULL LIMIT 10 OFFSET 0

【问题讨论】:

    标签: mysql sql database mariadb


    【解决方案1】:

    你需要括号

    SELECT * FROM my_column WHERE (title LIKE "%hea%" OR department LIKE "%hea%" OR
    title_pt LIKE "%hea%") AND deleted_at IS NULL LIMIT 10 OFFSET 0
    

    把它想象成数学,你必须告诉它运算的顺序。您实际上是在请求 title_py LIKE "%hea" AND deleted_at IS NULL,而其他 ORs 根本没有与 AND 交互。

    【讨论】:

      【解决方案2】:

      这是你写的:

      SELECT * FROM my_column 
       WHERE (title LIKE "%hea%") OR (department LIKE "%hea%") 
          OR ((title_pt LIKE "%hea%") AND (deleted_at IS NULL)) 
      LIMIT 10 OFFSET 0
      

      你想要这个:

      SELECT * FROM my_column 
       WHERE ((title LIKE "%hea%") OR (department LIKE "%hea%") OR (title_pt LIKE "%hea%")) 
         AND (deleted_at IS NULL) 
      LIMIT 10 OFFSET 0
      

      【讨论】:

        【解决方案3】:

        括号只会为您提供deleted_at NULL 且其他条件之一为 TRUE 的行:

        SELECT * 
        FROM my_column 
        WHERE (   
                  title      LIKE "%hea%" 
               OR department LIKE "%hea%" 
               OR title_pt   LIKE "%hea%"
              )
              AND 
                  deleted_at IS NULL 
        LIMIT 10 OFFSET 0
        

        【讨论】:

          猜你喜欢
          • 2014-05-26
          • 1970-01-01
          • 2018-10-18
          • 1970-01-01
          • 2017-09-12
          • 1970-01-01
          • 1970-01-01
          • 2012-12-23
          • 2017-08-30
          相关资源
          最近更新 更多