我正在一种情况下工作,我需要显示表中列表中不存在 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;