表a与表b 的差集select count(*)
from
(
    select * from table1 minus select * from table2 
)结果是把table2的总数给查出来了...我想取的是 他俩的差集.麻烦高手给写下  谢谢!

解决方案 »

  1.   

    你这样查询的结果是,两表所有列的比较,要完全匹配才行,估计你应该得到的是table1的总数,还是?
      

  2.   

    首先要理解minus的意思,假设结果集A和B ,如果A minus B 那么显示的结果是所有在A中而不在B中的记录。
    你所写的的是两个结果集:table1的所有记录,table2的所有记录。这样count的结果是难以估量的,你说刚好是table2的数量,估计是碰巧了。单纯的这样好像是没什么意思的,应该加上几个特定的列才有意义。
      

  3.   

    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 更加灵活,无需考虑两个结果集字段匹配的问题,需要显示什么字段都可以。