【问题标题】:Select records where except A or B选择除 A 或 B 以外的记录
【发布时间】:2014-02-14 18:46:08
【问题描述】:

我无法将以下人类语言转换为 MySQL 查询:

Select all rows except those with ColA equals '1' OR ColB equals '1'.

我试过了:

SELECT * FROM table WHERE ColA = '1' OR ColB = '1';

上面将提取与上面的 where 子句匹配的记录(ColA = '1' 或 ColB = '1'),但我如何得到相反的结果?我希望我描述正确。如果有混淆请告诉我。

【问题讨论】:

    标签: mysql select where records except


    【解决方案1】:
    select
        *
    from
        `myTable`
    where
        `colA` <> 1 and
        `ColB` <> 1
    

    只有当 colA 和 colB 是 NOT NULL 时,这才适用于您。如果有colA = NULL 或colB = NULL 的行,您必须更改请求中的条件。

    select
        *
    from
        `myTable`
    where
        (`colA` <> 1 or `colA` is null) and 
        (`colB` <> 1 or `colB` is null)
    

    当然,这取决于您是否想要具有 NULL 值的行,但很多人忘记了这一点。

    这是 SQL Fiddle 示例 http://www.sqlfiddle.com/#!2/ea797/2

    【讨论】:

    • 谢谢!这行得通!让我失望的是空值。我有空值和空值的混合值。其他人提供了解决方案,但他们忘记了 null/empty 值。
    【解决方案2】:
    SELECT * FROM table WHERE ColA <> 1 AND ColB <> 1;
    

    或者如果您想放大列表 (1, 2, 3) 而不仅仅是 (1),请尝试:

    SELECT * FROM table WHERE ColA NOT IN (1,2,3) AND ColB NOT IN (1,2,3);
    

    【讨论】:

      【解决方案3】:
      SELECT * FROM table WHERE ColA <> '1' && ColB <> '1';
      

      【讨论】:

        【解决方案4】:
        SELECT * FROM table 
        WHERE ColA <> '1'
        AND ColB <> '1'
        

        或

        SELECT * FROM table 
        WHERE NOT (ColA = '1' OR ColB = '1')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-22
          • 1970-01-01
          • 2013-11-24
          • 1970-01-01
          • 1970-01-01
          • 2022-01-09
          相关资源
          最近更新 更多