0

如果我执行以下查询:
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)不在数据库中。

4

2 回答 2

2

使用

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
于 2013-01-24T22:30:24.673 回答
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
于 2013-01-24T22:52:14.180 回答