一张表的字段更新另一张表的字段

lvxiao715 2010-04-06 02:33:46
比如火车吧:
A表:
id, 车次, 起点, 终点
1 k100 hangzhou shanghai
2 k300 hangzhou beijin
3 D50 guangzhou shanghai
4 L80 shanghai beijin
B表:
城市名称 城市编码
杭州 hangzhou
上海 shanghai
北京 beijin
广州 guangzhou
需要用B表的‘城市名称’来更新A表的‘起点’‘终点’
比如更新后A表为:
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京

用下面的语句不行
UPDATE T1
SET F3=(SELECT T2.F2 FROM T2 WHERE T2.F1=T1.F1)
...全文
132 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
喜-喜 2010-04-06
  • 打赏
  • 举报
回复
use test
go
创建数据表
create table A
(
id int,
车次 char(5),
起点 char(9),
终点 char(9)
)
--插入测试数据
insert into A select 1,'k100','hangzhou','shanghai'
union all select 2,'k300','hangzhou','beijing'
union all select 3,'D50','guangzhou','shanghai'
union all select 4,'L80','shanghai','beijing'
-- 创建数据表
create table B
(
城市名称 char(5),
城市编码 char(9)
)
--插入测试数据
insert into B select '杭州','hangzhou'
union all select '上海','shanghai'
union all select '北京','beijing'
union all select '广州','guangzhou'
go
代码实现

update A
set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)

select * from A

/*
id 车次 起点 终点
-----------------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京

*/
b3727180 2010-04-06
  • 打赏
  • 举报
回复
也是就是 A表的 shanghai 在B表找到了2笔或2笔以上的记录 。请先整理数据库
b3727180 2010-04-06
  • 打赏
  • 举报
回复
你的数据貌似有重复数据 在B表中 以上Sql是在 B表中无重复数据的情况下
dawugui 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lvxiao715 的回复:]
为什么我会这样
消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。
[/Quote]
create table a(id int,车次 varchar(10), 起点 varchar(20), 终点 varchar(20))
insert into a values(1 ,'k100' ,'hangzhou' ,'shanghai')
insert into a values(2 ,'k300' ,'hangzhou' ,'beijin')
insert into a values(3 ,'D50' ,'guangzhou' ,'shanghai')
insert into a values(4 ,'L80' ,'shanghai' ,'beijin')
create table b(城市名称 varchar(20) , 城市编码 varchar(20))
insert into b values('杭州', 'hangzhou')
insert into b values('上海', 'shanghai')
insert into b values('北京', 'beijin')
insert into b values('广州', 'guangzhou')
go

update A
set 起点 = (select top 1 城市名称 from b where 城市编码 = a.起点 order by 城市名称),
终点 = (select top 1 城市名称 from b where 城市编码 = a.终点 order by 城市名称)
from A

select * from a

drop table a , b

/*
id 车次 起点 终点
----------- ---------- -------------------- --------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京

(所影响的行数为 4 行)


*/

lvxiao715 2010-04-06
  • 打赏
  • 举报
回复
为什么我会这样
消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。
ws_hgo 2010-04-06
  • 打赏
  • 举报
回复
create table a(id int,车次 varchar(10), 起点 varchar(20), 终点 varchar(20))
insert into a values(1 ,'k100' ,'hangzhou' ,'shanghai')
insert into a values(2 ,'k300' ,'hangzhou' ,'beijin')
insert into a values(3 ,'D50' ,'guangzhou' ,'shanghai')
insert into a values(4 ,'L80' ,'shanghai' ,'beijin')
create table b(城市名称 varchar(20) , 城市编码 varchar(20))
insert into b values('杭州', 'hangzhou')
insert into b values('上海', 'shanghai')
insert into b values('北京', 'beijin')
insert into b values('广州', 'guangzhou')
go

update a set 起点=(select 城市名称 from b where 城市编码=起点),
终点=(select 城市名称 from b where 城市编码=终点)


select * from a
id 车次 起点 终点
----------- ---------- -------------------- --------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京

(4 行受影响)
dawugui 2010-04-06
  • 打赏
  • 举报
回复
create table a(id int,车次 varchar(10), 起点 varchar(20), 终点 varchar(20))
insert into a values(1 ,'k100' ,'hangzhou' ,'shanghai')
insert into a values(2 ,'k300' ,'hangzhou' ,'beijin')
insert into a values(3 ,'D50' ,'guangzhou' ,'shanghai')
insert into a values(4 ,'L80' ,'shanghai' ,'beijin')
create table b(城市名称 varchar(20) , 城市编码 varchar(20))
insert into b values('杭州', 'hangzhou')
insert into b values('上海', 'shanghai')
insert into b values('北京', 'beijin')
insert into b values('广州', 'guangzhou')
go

update A
set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)

select * from a

drop table a , b

/*
id 车次 起点 终点
----------- ---------- -------------------- --------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京

(所影响的行数为 4 行)

*/
--小F-- 2010-04-06
  • 打赏
  • 举报
回复
update
A
set
起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)
dawugui 2010-04-06
  • 打赏
  • 举报
回复
create table a(id int,车次 varchar(10), 起点 varchar(20), 终点 varchar(20))
insert into a values(1 ,'k100' ,'hangzhou' ,'shanghai')
insert into a values(2 ,'k300' ,'hangzhou' ,'beijin')
insert into a values(3 ,'D50' ,'guangzhou' ,'shanghai')
insert into a values(4 ,'L80' ,'shanghai' ,'beijin')
create table b(城市名称 varchar(20) , 城市编码 varchar(20))
insert into b values('杭州', 'hangzhou')
insert into b values('上海', 'shanghai')
insert into b values('北京', 'beijin')
insert into b values('广州', 'guangzhou')
go

update A
set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)
from A

select * from a

drop table a , b

/*
id 车次 起点 终点
----------- ---------- -------------------- --------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京

(所影响的行数为 4 行)

*/
htl258_Tony 2010-04-06
  • 打赏
  • 举报
回复
update A set 
起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)
dawugui 2010-04-06
  • 打赏
  • 举报
回复
update A
set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)
from A

22,209

社区成员

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

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