2010-04-27 209 views
30

如何获得两个结果集的集合差异?MySQL:两个结果集的差异

说我有一个结果集(每个只有一个列):

result1: 
'a' 
'b' 
'c' 

result2: 
'b' 
'c' 

我要负什么是在RESULT1通过RESULT2:RESULT1 - RESULT2使得它等于:

difference of result1 - result2: 
'a' 

回答

50

要执行result1 - result2,可以将result1与result2结合,并且只输出result1中存在的项目。例如:

SELECT DISTINCT result1.column 
FROM result1 LEFT JOIN result2 ON result1.column = result2.column 
WHERE result2.column IS NULL 

注意,不是一套差异,并且不会在RESULT2输出项目中不存在RESULT1。它设置为减法

参见:http://www.bitbybit.dk/carsten/blog/?p=71

+0

感谢您的澄清,我已经使用MySQL已经有一段时间了。 – 2010-04-27 18:30:09

9

如果你想在result1事情是不是在result2,何谈:

SELECT distinct result1 
FROM t1 
WHERE result1 NOT IN (select distinct result2 from t2); 

或者:

SELECT distinct result 
from t1 t 
where NOT EXISTS (select 1 from t2 where result2 = t.result1) 

注意:如果result1是一个子集的result2然后上述查询将返回一个空集(他们不会告诉你的东西在result2不在result1),所以它们没有设置差异,但也可能有用(可能比外部联接效率更高)。