如果我执行以下查询:
select * from tabla where codigo in (33,34,55,10,22,50);
msyql向我显示与查询匹配的记录。
但是如果我想知道这个查询(33,34,55,10,22,50)中哪些记录不在数据库中呢?
有没有办法知道,而不必每人自己比较一个记录?
不好意思,我不能解释清楚。这显示了数据库中但与查询不匹配的记录。我想知道这些记录(33,34,55,10,22,50)不在数据库中。
答案 0 :(得分:2)
使用NOT:
select * from tabla where codigo NOT in (33,34,55,10,22,50);
<强>更新强>
根据这一新解释,请执行以下操作:
SELECT n.id
FROM
(SELECT 33 AS codigo
UNION SELECT 34
UNION SELECT 55
UNION SELECT 10
UNION SELECT 22
UNION SELECT 50) AS n
LEFT JOIN tabla USING (codigo)
WHERE tabla.codigo IS NULL;
不幸的是,MySQL(以及许多其他系统)没有提供一种简单的方法来使用某些表中尚未存在的任意数字列表。如果您需要动态执行此操作,我建议将这些数字添加到临时表中以代替硬编码的UNION批次。或者生成一个可重用的数字表(我发现它非常有用),并使用那里的值。例如:
SELECT nt.id
FROM numbers_table nt
LEFT JOIN tabla ON nt.id = tabla.codigo
WHERE nt.id IN (33,34,55,10,22,50)
AND tabla.codigo IS NULL
答案 1 :(得分:2)
尝试一下
set @suggest_value:=10; // <---10 is the lowest value
select codigo,
@suggest_value:=@suggest_value+1,
if(codigo=@suggest_value, 0, 1) as missing_value
from tabla