有两个表table1,table2,它们都有一个字段名为sfz,字段类型为varchar,即身份证,但两个表所存储的数据不尽相同。现在在table2中增加一个字段名为sfsh,字段类型为varchar,即是否审核。功能如下,当table2的sfz的数据在table1中的sfz有时,则更新sfsh为‘是’;当table2的sfz的数据在table1中的sfz没有时,则更新sfsh为‘否’,怎样写这个更新语句?

解决方案 »

  1.   

    USE PUBS
    GO
    if exists(select * from sysobjects where name='Ta' and xtype='U') drop table Ta
    if exists(select * from sysobjects where name='Tb' and xtype='U') drop table Tb
    GO
    /*--生成测试用数据,为SELECT初始环境--*/
    CREATE TABLE Ta(sfz varchar(20),姓名 varchar(10))
    INSERT INTO Ta SELECT '4110023','张三'
    UNION ALL SELECT '51230221','李四'
    UNION ALL SELECT '72246583','王五'
    UNION ALL SELECT '51238694','赵六'
    CREATE TABLE Tb(sfz varchar(20),标记 varchar(10))
    INSERT INTO Tb SELECT '72246583',Null
    UNION ALL SELECT '4110023',Null
    UNION ALL SELECT '4110023',NullSELECT * FROM Ta
    SELECT * FROM Tb-- 真正需要的UPDATE 语句
    UPDATE TB SET 标记='YES' WHERE EXISTS (SELECT 1 FROM Ta WHERE sfz=Tb.sfz)
    SELECT * FROm TB/* -- 完成 --*/
      

  2.   

    如题所示的原始数据,表Ta,表Tb:
    sfz                  姓名         
    -------------------- ---------- 
    4110023              张三
    51230221             李四
    72246583             王五
    51238694             赵六(所影响的行数为 4 行)sfz                  标记         
    -------------------- ---------- 
    72246583             NULL
    4110023              NULL
    4110023              NULL(所影响的行数为 3 行)
      

  3.   

    执行以下语句:UPDATE TB SET 标记='YES' WHERE EXISTS (SELECT 1 FROM Ta WHERE sfz=Tb.sfz)
    UPDATE TB SET 标记='NO' WHERE NOT EXISTS (SELECT 1 FROM Ta WHERE sfz=Tb.sfz)之后得到结果:(SELECT * FROM TB)sfz                  标记         
    -------------------- ---------- 
    72246583             YES
    4110023              YES
    8657142              NO(所影响的行数为 3 行)
    注,2楼中的测试数据中,把Tb表中的第三个号码改为8657142,2楼写重复了看不出区别来。
      

  4.   

    这样试试:
    UPDATE a SET sfsh = 
    case 
        when exists(select 1 from table1 where sfz = a.sfz)
        then '是'
        else '否'
    end
    FROM table2 AS a
      

  5.   

    一个来月不来,这儿又出了这么多星星...hellowork(一两清风),你升的蛮快的啊..还是上面的例子,可以用WHEN完成,刚才写着写着QQ去了..呵呵,补上:UPDATE TB SET 标记=CASE  WHEN EXISTS(SELECT 1 FROM Ta WHERE sfz=Tb.sfz) THEN 'YES'ELSE 'NO' END
      

  6.   

    呵呵,手头有工程在做,很少机会上CSDN了,挤出一点时间去QQ去了,呵呵..
    你就慢慢升吧。