两表只比较部分字段,我始终没弄得,郁闷中    t1            t2            tt
a  b  c  d    a  b  c  d    a  b  c  d
1  2  4  5    5  4  2  5    5  4  2  5
4  3  8  2    7  4  6  7    6  2  3  5
3  4  6  7    6  2  3  5              t1 与 t2 进行比较,筛选出 t2 中字段 b,c,d 都与 t1 的 b,c,d 不同的记录(不理会字段 a),得到表 tt 
这个例子中,t2 的第二行 7,4,6,7 因为与 t1 的第三行 3,4,6,7 (字段 b,c,d )相同而被剔除这个sql该怎么写呀,是不是对你来说挺简单的,呵呵,谢谢了 ^_^

解决方案 »

  1.   

    select * from T2 
    where not exists(select * from t1 where T2.b=t1.b and T2.c=t1.c and T2.d=t1.d )
      

  2.   

    一直以为 not exists 后面只能是一个单值,比如说序号之类的,没想到也可以是 *,谢谢 feixianxxx 了,学习
      

  3.   

    据说也能用 join 表连接 完成这个操作,你还能再次赐教吗?
      

  4.   


    DECLARE @T1 TABLE(
    A INT,
    B INT,
    C INT,
    D INT
    )
    INSERT INTO @T1
    SELECT 1,2,4,5 UNION ALL
    SELECT 4,3,8,2 UNION ALL
    SELECT 3,4,6,7 
    DECLARE @T2 TABLE(
    A INT,
    B INT,
    C INT,
    D INT
    )
    INSERT INTO @T2
    SELECT 5,4,2,5 UNION ALL
    SELECT 7,4,6,7 UNION ALL
    SELECT 6,2,3,5SELECT T3.* FROM @T2 T3
    INNER JOIN (
    SELECT T2.* FROM @T2 T2
    INNER JOIN @T1 T1 ON T2.B=T1.B AND T2.C=T1.C AND T2.D=T1.D
    ) T4 ON T3.A<>T4.A OR T3.B<>T4.B OR T3.C<>T4.C OR T3.D<>T4.D/*
    5 4 2 5
    6 2 3 5比T-MAC那个多拐了个弯
    */
      

  5.   

    使用集合运算符except
    select * 
    from t2
    except
    select t2.*
    from t1,t2
    where t1.b=t2.b and t1.c=t2.c and t1.d=t2.d
    ;
      

  6.   

    谢谢 feixianxxx, guguda2008, gzzwind 的指教,结贴了