【问题标题】:Advanced Mysql query with case and when带有 case 和 when 的高级 Mysql 查询
【发布时间】:2018-11-15 03:26:46
【问题描述】:

我在一种情况下工作,我需要显示列表中不存在 id 的表中的几条记录。

SELECT * FROM contract 
WHERE `id` NOT IN ( 
    CASE 
        WHEN type = 1 THEN '159,154' 
        WHEN type = 2 THEN '' 
        WHEN type = 3 THEN '' 
    END 
) 
ORDER BY id DESC 

在这里您可以看到,如果合同类型 = 1,则结果不应显示表中的 159 和 154 条记录。但结果中也出现了 154 条数字记录,这是不应该的。

任何帮助表示赞赏!

【问题讨论】:

  • '159,154' != '159','154'
  • 感谢@lad2025,那么我该如何实现呢?

标签: mysql case notin .when


【解决方案1】:

如下图使用MySQL INSTR() function

SELECT * FROM contract 
WHERE INSTR(IF(type = 1, '159,154',''),`id`)<0
ORDER BY id DESC;

【讨论】:

  • 我刚刚将案例转换为如果,再试一次。
【解决方案2】:

我认为这可行:

SELECT * FROM contract 
WHERE (type = 1 AND id NOT IN ('159','154')) OR
    (type IN (2,3) AND id != '')
ORDER BY id DESC 

【讨论】:

    【解决方案3】:
    ...WHERE (type = 1 AND id NOT IN('159','154')) 
    OR   (type = 2 AND id !='') 
    OR   (type = 3 AND id !='') 
    

    如果 id 是数字,请删除引号,以便您可以使用可能的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-07
      • 2011-04-17
      • 2017-05-30
      • 2021-03-15
      • 2014-11-29
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多