如何获得两个表差集---minus

xjswuai 2009-11-19 10:15:39
表a与表b 的差集

select count(*)
from
(
select * from table1 minus select * from table2
)

结果是把table2的总数给查出来了...我想取的是 他俩的差集.

麻烦高手给写下 谢谢!
...全文
323 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zswangg 2010-04-15
  • 打赏
  • 举报
回复
Minus的作用于Union作用相反,取第一个结果集与第二个结果集的差集,两个结果集必须字段个数相等,类型相同。
例table1与table2结构相同,存在table1而不存在table2的记录 :
select * from table1
minus
select * from table2

Minus的效率比Not in要高的多,尤其是数据量大的时候。如查出尚未收费的发货单:
语句一:select billno from t_bussiness
Minus
select billno from t_Money where ifmoney = 'Y'
语句二:select billno from t_bussiness
Not in (select billno from t_Money where ifmoney = 'Y')

虽然Minus效率较高,但not in 更加灵活,无需考虑两个结果集字段匹配的问题,需要显示什么字段都可以。
huangyunzeng2008 2009-11-19
  • 打赏
  • 举报
回复
首先要理解minus的意思,假设结果集A和B ,如果A minus B 那么显示的结果是所有在A中而不在B中的记录。
你所写的的是两个结果集:table1的所有记录,table2的所有记录。这样count的结果是难以估量的,你说刚好是table2的数量,估计是碰巧了。

单纯的这样好像是没什么意思的,应该加上几个特定的列才有意义。
lengyunfei006 2009-11-19
  • 打赏
  • 举报
回复
你这样查询的结果是,两表所有列的比较,要完全匹配才行,估计你应该得到的是table1的总数,还是?

3,496

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧