mysql 查找查询中不在表中的数字

Ste*_*hen 4 mysql sql

有没有一种简单的方法可以将查询中的数字列表与表中的列进行比较,以返回不在数据库中的数字?

我有一个以逗号分隔的数字列表(1,57、888、99、76、490 等),我需要将其与数据库中表中的数字列进行比较。其中一些数字在表中,有些不在表中。我需要查询返回那些在我的逗号分隔列表中但不在数据库中的内容...

Dav*_*ber 6

我会将要检查的数字列表放在自己的表中,然后使用WHERE NOT EXISTS来检查它们是否存在于要查询的表中。请参阅此SQLFiddle 演示,了解如何完成此操作的示例:

如果您熟悉这种语法,您甚至可以避免放入临时表:

SELECT * FROM (
  SELECT 1 AS mycolumn
   UNION
  SELECT 2
   UNION
  SELECT 3
   UNION
  SELECT 4
   UNION
  SELECT 5
   UNION
  SELECT 6
   UNION
  SELECT 7
  ) a
 WHERE NOT EXISTS ( SELECT 1 FROM mytable b
                     WHERE b.mycolumn = a.mycolumn )
Run Code Online (Sandbox Code Playgroud)

根据 OP 的评论更新

如果您可以将很长的数字列表插入到一个表中,则按如下方式查询以获取在另一个表中找不到的数字:

SELECT mynumber
  FROM mytableof37000numbers a
 WHERE NOT EXISTS ( SELECT 1 FROM myothertable b
                     WHERE b.othernumber = a.mynumber)
Run Code Online (Sandbox Code Playgroud)

交替

SELECT mynumber
  FROM mytableof37000numbers a
 WHERE a.mynumber NOT IN ( SELECT b.othernumber FROM myothertable b )
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。