如果我执行以下查询:
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)的内容。

最佳答案

使用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

09-10 02:45
查看更多