问一个update的sql

_XuDaojie 2013-12-20 05:28:53
-- data
id id_emp emp_make
1 1 小明
2 2 小明
3 2 中明
4 大明
5 无明
-- employee
id emp
1 小明
2 中明
3 大明

首先
data表的emp_make不能为null
id_emp和employee表的id关联
我现在想将data表中id_emp为null和'',并且emp_make在employee表中也能找到对应的记录的时候
就将id_emp更新为employee表中中对应的id

也就是最终data表中的结果将变成
id      id_emp     emp_make
1 1 小明
2 2 小明
3 2 中明
4 3 大明
5 无明

下面是建表语句
-- ----------------------------
-- Table structure for [dbo].[employee]
-- ----------------------------
DROP TABLE [dbo].[employee]
GO
CREATE TABLE [dbo].[employee] (
[id] int NOT NULL ,
[emp] nvarchar(10) NULL
)


GO

-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO [dbo].[employee] ([id], [emp]) VALUES (N'1', N'小明');
GO
INSERT INTO [dbo].[employee] ([id], [emp]) VALUES (N'2', N'中明');
GO
INSERT INTO [dbo].[employee] ([id], [emp]) VALUES (N'3', N'大明');
GO

-- ----------------------------
-- Indexes structure for table employee
-- ----------------------------

-- ----------------------------
-- Primary Key structure for table [dbo].[employee]
-- ----------------------------
ALTER TABLE [dbo].[employee] ADD PRIMARY KEY ([id])
GO

-- ----------------------------
-- Table structure for [dbo].[data]
-- ----------------------------
DROP TABLE [dbo].[data]
GO
CREATE TABLE [dbo].[data] (
[id] int NOT NULL ,
[id_emp] int NULL ,
[emp_make] nvarchar(10) NULL
)


GO

-- ----------------------------
-- Records of data
-- ----------------------------
INSERT INTO [dbo].[data] ([id], [id_emp], [emp_make]) VALUES (N'1', N'1', N'小明');
GO
INSERT INTO [dbo].[data] ([id], [id_emp], [emp_make]) VALUES (N'2', N'2', N'小明');
GO
INSERT INTO [dbo].[data] ([id], [id_emp], [emp_make]) VALUES (N'3', N'2', N'小明');
GO
INSERT INTO [dbo].[data] ([id], [id_emp], [emp_make]) VALUES (N'4', null, N'大明');
GO
INSERT INTO [dbo].[data] ([id], [id_emp], [emp_make]) VALUES (N'5', null, N'无明');
GO

-- ----------------------------
-- Indexes structure for table data
-- ----------------------------

-- ----------------------------
-- Primary Key structure for table [dbo].[data]
-- ----------------------------
ALTER TABLE [dbo].[data] ADD PRIMARY KEY ([id])
GO

-- ----------------------------
-- Foreign Key structure for table [dbo].[data]
-- ----------------------------
ALTER TABLE [dbo].[data] ADD FOREIGN KEY ([id_emp]) REFERENCES [dbo].[employee] ([id]) ON DELETE NO ACTION ON UPDATE NO ACTION
GO
...全文
123 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 a379992210 的回复:
[quote=引用 5 楼 yupeigu 的回复:]
update [data]
set [id_emp]=b.[id]
from [employee] b
where ([data].id_emp is null or [data].id_emp='') 
   and [data].emp_make=b.emp
   
select *
from data
/*
id	id_emp	emp_make
1	1	小明
2	2	小明
3	2	小明
4	3	大明
5	NULL	无明
*/
你写的和华夏小卒的是一样 都是可以的[/quote] 呵呵,稍有不同,只是我在from 写了[employee] 表,而他写了 [data] a,[employee] b
_XuDaojie 2013-12-20
  • 打赏
  • 举报
回复
引用 5 楼 yupeigu 的回复:
update [data]
set [id_emp]=b.[id]
from [employee] b
where ([data].id_emp is null or [data].id_emp='') 
   and [data].emp_make=b.emp
   
select *
from data
/*
id	id_emp	emp_make
1	1	小明
2	2	小明
3	2	小明
4	3	大明
5	NULL	无明
*/
你写的和华夏小卒的是一样 都是可以的
_XuDaojie 2013-12-20
  • 打赏
  • 举报
回复
引用 2 楼 js_szy 的回复:
	 update [data]
	 set [id_emp]=b.[id]
	 from [data] a,[employee] b
	 where (a.id_emp is null or a.id_emp='') and a.emp_make=b.emp
原来update也有from的 以前都没有试过
  • 打赏
  • 举报
回复
update [data]
set [id_emp]=b.[id]
from [employee] b
where ([data].id_emp is null or [data].id_emp='') 
   and [data].emp_make=b.emp
   
select *
from data
/*
id	id_emp	emp_make
1	1	小明
2	2	小明
3	2	小明
4	3	大明
5	NULL	无明
*/
唐诗三百首 2013-12-20
  • 打赏
  • 举报
回复

update a
 set a.id_emp=b.id
 from [data] a
 inner join [employee] b on b.emp=a.emp_make
 where a.id_emp is null or a.id_emp=''


select * from [data]

/*
id          id_emp      emp_make
----------- ----------- ----------
1           1           小明
2           2           小明
3           2           中明
4           3           大明
5           NULL        无明

(5 row(s) affected)
*/
  • 打赏
  • 举报
回复
	 update [data]
	 set [id_emp]=b.[id]
	 from [employee] b
	 where ([data].id_emp is null or [data].id_emp='') 
	       and [data].emp_make=b.emp
华夏小卒 2013-12-20
  • 打赏
  • 举报
回复
	 update [data]
	 set [id_emp]=b.[id]
	 from [data] a,[employee] b
	 where (a.id_emp is null or a.id_emp='') and a.emp_make=b.emp
發糞塗牆 2013-12-20
  • 打赏
  • 举报
回复
UPDATE [data] SET id_emp=employee.id FROM [data] LEFT JOIN employee ON [data].emp_make=employee.emp WHERE ISNULL([data].id_emp,'')=''

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧