【问题标题】:Exclusion in SQL server WHERE clauseSQL server WHERE 子句中的排除
【发布时间】:2021-04-19 20:44:36
【问题描述】:

我只想排除如果 ColumnA = 'SA' 排除 ColumnB 不像 '%Prev%' 并且 ColumnB 不像 '%old%'。如果 columnA = 'BA' 我想保留它们。经验:

select columnA
    from Table
    where columnA ='SA' and ColumnB not like '%Prev%' and ColumnB not like '%old%'

【问题讨论】:

  • MySQL 还是 SQL Server?它们不一样 - 请标记单个 RDBMS。请显示示例数据和预期结果(格式文本不是图像)。
  • 请在问题输入字段中发布问题,而不是在标题中。同时更正 DBMS 标记。
  • @astentx 按照建议修复

标签: sql sql-server database


【解决方案1】:

你想要or:

select columnA
from Table
where (columnA = 'SA' and ColumnB not like '%Prev%' and ColumnB not like '%old%') or
      columnA <> 'SA'

如果columnA 可以是NULL,逻辑也需要考虑到这一点。

【讨论】:

    【解决方案2】:

    or 逻辑运算符应该可以解决问题:

    SELECT columnA
    FROM   mytable
    WHERE  columnA != 'SA' OR (ColumnB NOT LIKE '%Prev%' AND ColumnB NOT LIKE '%old%')
    

    请注意,括号并不是严格要求的,但我认为它们使查询更易于阅读。

    【讨论】:

    • 对于此类问题,最好说他们需要养成一种习惯,将它们明确地结合 OR/AND 并消除调试长链 OR 和 AND 的需要。当一个人足够熟练时,他或她会知道他们不是他或她自己所需要的,而是了解他们存在的魅力;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2013-09-08
    • 1970-01-01
    相关资源
    最近更新 更多