使用“IN”搜索记录并显示表中不存在的记录

时间:2014-02-07 19:19:18

标签: sql

实际上我有一个值列表,我只想知道特定表中不存在的值。

表'ball'在colunm颜色上的值为绿色和红色。

要返回注册值的查询是:

Select * from ball where colors in ('green', 'red', 'blue', 'gray')

在这种情况下,我需要返回BLUE和GRAY。

快速编辑:我有5k +的结果比较这种方式。

2 个答案:

答案 0 :(得分:2)

您需要使用UNION:

SELECT colors FROM 
 (select 'green'as colors
  union
  select 'red'
  union
  select 'blue'
  union
  select 'gray') all_colors
WHERE NOT EXISTS (SELECT ball.colors FROM ball WHERE ball.colors = all_colors.colors)

或者,如果您有某些表(或可以制作一个)包含所有颜色的表,您就可以跳过UNION并只使用该表。

答案 1 :(得分:0)

假设你有一个存储每种可用球颜色的表,你可以这样做:

SELECT all_colors.color
FROM all_colors LEFT JOIN balls ON balls.color = all_colors.color
WHERE balls.color IS NULL

您还可以为每个表上的color列创建索引,以进一步加快速度。

左外连接的一些阅读:http://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join