表A列一  列二  
xx    60
yy    50
zz    80表B列一  列二  列三
xx     x1    20
xx     x2    40
yy     y1    5
yy     y2    45
zz     z1    10
zz     z2    30现在要在表A中查出表B列三之和不等于表A列二的
结果为
zz   80以上,谢谢

解决方案 »

  1.   

    select a.*
    from ta a left join (select 列一,sum(列三) as 列三 from tb group by 列一) b 
      on a.列一 = b.列一 and a.列二 = b.列三
    where b.列一 is null
      

  2.   

    select * from 表A a
    left join (select 列一,sum(列三) as 列三 from 表B group by 列一) b on a.列一=b.列一 and a.列三<>b.列三
      

  3.   


    --或者select a.*
    from ta a inner join (select 列一,sum(列三) as 列三 from tb group by 列一) b 
      on a.列一 = b.列一 and a.列二 <> b.列三
      

  4.   

    use tempdb
    gocreate table t1 (col1 varchar(20), col2 int)
    gocreate table t2 (col1 varchar(20), col2 varchar(20), col3 int)
    goinsert into t1 values ('xx',60), ('yy',50),('zz',80);insert into t2 values 
    ('xx','x1',20),('xx','x2',40),
    ('yy','y1',5),('yy','y2',45),
    ('zz','z1',10),('zz','z2',30)select t1.col1, t1.col2 from t1 join (select col1, SUM(col3) as col3 from t2 group by col1) as t3
    on t1.col1 = t3.col1 where t1.col2 <> t3.col3
      

  5.   

    奇怪,用left join 不行,然后我用了inner join 就可以啦,请问这两个有什么差别吗?还有join的用法,我一直不怎么明白,请指点,非常感谢coolingpipe,nightmaple,superdingdang等。
      

  6.   

    内联,左连,看你谁做主表啊,你是否显示哪个表关联不上的记录,选择left join ,inner join
      

  7.   


    create table #a(
    col1 char(2),
    col2 decimal(2)
    )create table #b(
    col1 char(2),
    col2 char(2),
    col3 decimal(2)
    )select a.col1,a.col2 from #a as a 
    inner join (select col1,sum(col3) as col3 from #b group by col1) as b 
    on a.col1=b.col1 and a.col2<>b.col3
    -----------
    zz 80只能是inner join