SQL怎么查询两个表中不同的数据 5
使用except函数,select * from B where (select count(1) from A where A.ID = B.ID) = 0.
方法一(推荐)
WITH C AS ( SELECT Name
FROM ConsumerCouponApply A
WHERE NOT EXISTS ( SELECT 1
FROM ConsumerCouponApply B
WHERE B.Name = A.Name
GROUP BY B.Name )
GROUP BY A.Name
)
SELECT COUNT(1)
FROM C
方法二
WITH C AS ( SELECT A.Name
FROM ConsumerCouponApply A
GROUP BY A.Name
EXCEPT
SELECT B.Name
FROM ConsumerCouponApply B
GROUP BY B.Name
)
SELECT COUNT(1)
FROM C
方法三
SELECT COUNT(A.Name)
FROM ConsumerCouponApply A
LEFT JOIN ConsumerCouponApply B ON A.Name = B.Name
WHERE B.ID IS NULL
扩展资料:
高级查询运算词:
A: UNION 运算符:
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个
结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行
不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当
ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
假设两个表都有唯一键UserID
可以这么写(使用全连接【full outer join】:完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。)
select
*
from
RCSA_UserInfoDEL a
full outer join RCSA_UserInfo b on a.UserID=b.UserID
where
a.UserID is null
or b.UserID is null
select * from a
except
select * from b
可以参考:http://blog.csdn.net/tjvictor/article/details/5346024