带有大小写和时间的高级 Mysql 查询



我正在一种情况下工作,我需要显示表中列表中不存在 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个数字记录也出现在不应该的结果中。

任何帮助表示赞赏!

...WHERE (type = 1 AND id NOT IN('159','154')) 
OR   (type = 2 AND id !='') 
OR   (type = 3 AND id !='') 

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

我认为这会起作用:

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

使用 MySQL INSTR(( 函数,如下所示:

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

最新更新