有两个表table1,table2,它们都有一个字段名为sfz,字段类型为varchar,即身份证,但两个表所存储的数据不尽相同。现在在table2中增加一个字段名为sfsh,字段类型为varchar,即是否审核。功能如下,当table2的sfz的数据在table1中的sfz有时,则更新sfsh为‘是’;当table2的sfz的数据在table1中的sfz没有时,则更新sfsh为‘否’,怎样写这个更新语句?
解决方案 »
- 数据插入: 列名或所提供值的数目与表定义不匹配。求帮助
- SQL server2005不支持自然连接吗?
- 昨晚尝试了一晚上解决不了,请问数据库SQL专家。
- +++++++++求一语句,没分了,只能给朋友们送10分,先在此感谢回答问题的朋友++++++++++++
- 部分字段相同视为重复记录,删除并只保留一条
- 在企业管理器中执行sql命令的问题,简单问题40分喔!
- vb.net 死锁问题
- 无法新建Sql Server注册
- 请问ACCESS里怎么得到日期加一天后的日期啊
- 怎样将oracl8i的SQL*Plus使用的缓冲区设置更大些,以便插入数据时大数据不被截掉。
- 关于SQL的并发数的疑问
- 问个简单的存储过程从一个表中查询,插入另一个表
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/* -- 完成 --*/
sfz 姓名
-------------------- ----------
4110023 张三
51230221 李四
72246583 王五
51238694 赵六(所影响的行数为 4 行)sfz 标记
-------------------- ----------
72246583 NULL
4110023 NULL
4110023 NULL(所影响的行数为 3 行)
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楼写重复了看不出区别来。
UPDATE a SET sfsh =
case
when exists(select 1 from table1 where sfz = a.sfz)
then '是'
else '否'
end
FROM table2 AS a
你就慢慢升吧。