实际上我有一个值列表,我只想知道特定表中不存在的值。
表'ball'在colunm颜色上的值为绿色和红色。
要返回注册值的查询是:
Select * from ball where colors in ('green', 'red', 'blue', 'gray')
在这种情况下,我需要返回BLUE和GRAY。
快速编辑:我有5k +的结果比较这种方式。
答案 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