name value
a     10
b     11
c     12tab2
name  value
a      1
b      2
我想取出tab1.value-tab2.value的值,当tab1.name=tab2.name,如果tab2.name中没有tab1.name时,就取出tab1.value,否则就把两个表中对应的value相减后取出.
我的sql不能取出tab2中没有tab1中name时的value.各位帮忙一下.谢谢了.
select tab1.name as name,(tab1.value-tab2.value) as value from tab1,tab2 where tab1.name=tab2.name

解决方案 »

  1.   

    select tab1.name as name,(tab1.value-tab2.value) as value from tab1,tab2 where tab1.name=tab2.name
    union
    select tab2.name,tab2.value from tab2
    where tab2.name not in (select tab1.name from tab1)
      

  2.   

    select tab1.name as name,(tab1.value-tab2.value) as value from tab1,tab2 where tab1.name=tab2.name
    union
    select tab1.name,tab1.value from tab1
    where tab1.name not in (select tab2.name from tab2)
      

  3.   

    各位老大,这样怎么不行:
    SELECT tab1.name,tab1.class,tab1.value-IIf(IsNull(tab2.value),0,tab2.value) AS Diff,tab3.name as t3ne
    FROM tab1 Left join tab2 on tab1.class=tab2.class and tab1.name=tab2.name
    left join tab3 on tab1.name=tab3.name and tab1.class=tab3.class
      

  4.   

    最上面的我这样解决了,但是我想要多个表join,上面的不行呀
    SELECT tab1.name,tab1.class,tab1.value-IIf(IsNull(tab2.value),0,tab2.value) AS Diff
    FROM tab1 Left join tab2 on tab1.class=tab2.class and tab1.name=tab2.name
      

  5.   

    SQL Server 2000
    Select Table1.Name, Table1.Value - IsNull( Table2.Value ) From
    Table1 Left Join Table2 On Table1.Name = Table2.NameOracle
    Select Table1.Name, Table1.Value - Nvl( Table2.Value ) From
    Table1 ,Table2 
    Where Table1.Name = Table2.Name(+)
      

  6.   

    谢谢关注!
    可是我想要多个表join,怎么办呀?
    SELECT tab1.name,tab1.class,tab1.value-IIf(IsNull(tab2.value),0,tab2.value) AS Diff,tab3.name as t3ne
    FROM tab1 Left join tab2 on tab1.class=tab2.class and tab1.name=tab2.name
    left join tab3 on tab1.name=tab3.name and tab1.class=tab3.class
    这样总提示出错!
    access数据库
      

  7.   

    哈,这样行了,要加()
    SELECT tab1.name,tab1.class,tab1.value-IIf(IsNull(tab2.value),0,tab2.value) AS Diff,tab3.name as t3ne
    FROM (tab1 Left join tab2 on tab1.class=tab2.class and tab1.name=tab2.name)
    left join tab3 on tab1.name=tab3.name and tab1.class=tab3.class
      

  8.   

    又有问题了
    SELECT tab1.name,tab1.class,tab1.value-IIf(IsNull(tab2.value),0,tab2.value) AS Diff,tab3.value as t3ne,tab4.value as t4ne,bb.value as bbss
    FROM ((((tab1
    left join tab2 on tab1.class=tab2.class and tab1.name=tab2.name)
    left join tab3 on tab1.name=tab3.name)
    left join tab4 on tab1.name=tab4.name and tab4.value between 1 and 10)//access不支持这样吗?
    left join tab1 as bb on tab1.name=bb.name)各位再帮一下,谢谢了