A         |     B
----------------------------
 id | name   |  id  |  name
----------------------------
  1     a    |   1      a 
  1     b    |   1      b
  1     c    |   NULL     NULL
我有两个表A,B,字段分辨为id和name,他们之间用id关联,现在我想把A表的数据复制到一个临时表中,
但是必须要满足下面条件只要A表id为1的数据与B表id为1的数据中有不相同的项,则把A数据插入的#RESULT表(换另外一种说法是A表中的name有个'c',而B表没有的name没有c,所以他们数据就不一样了,如果B表中数据完全和A表一样,那条件就不满足了)

解决方案 »

  1.   

    SELECT * FROM #A a WHERE NOT EXISTS (SELECT 1 FROM #b b ON a.id=b.id AND a.NAME<>b.name) 
      

  2.   

    insert into #table(id,name)
    select * 
    from A
    except
    select *
    from B--查找差值?
      

  3.   


    不是的,我意思是如果A表的数据与B表的数据有一行不相同的话,则把A表数据插到临时表中,
      

  4.   

    IF EXISTS(SELECT 1 FROM ta WHERE NOT  EXISTS(SELECT * FROM tb WHERE ta.id=tb.id AND ta.name=tb.NAME ))
    begin
    insert into #RESULT select * from ta 
    end
      

  5.   

    疑问:1、是否ID为主键?2、你所谓把A表数据是只要有一行不相同,则整个表A都插入?还是只把不同的插入?如果只把不同的插入,我和2楼的都可以。
      

  6.   

    SELECT * FROM #A a WHERE EXISTS (SELECT 1 FROM #b b ON a.id=b.id AND a.NAME<>b.name)写错了,应该不要not
      

  7.   


    1.ID不是主键
    2.整个表A都插入
      

  8.   

    IF (SELECT CHECKSUM_AGG (CHECKSUM (*)) FROM ta) 
    =
       (SELECT CHECKSUM_AGG (CHECKSUM (*)) FROM tb) 
    begin
    insert into #RESULT select * from ta 
    end
      

  9.   

    IF ( SELECT *
         FROM   A
         EXCEPT
         SELECT *
         FROM   B
       ) > 1 
        BEGIN
            INSERT  INTO #RESULT
                    SELECT  *
                    FROM    #a
        END
    没有主键的话用集合运算比较好,