比如火车吧:
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)
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)
set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)
from A
起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)
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')
goupdate A
set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)
from Aselect * from adrop table a , b/*
id 车次 起点 终点
----------- ---------- -------------------- --------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京(所影响的行数为 4 行)*/
A
set
起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)
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')
goupdate A
set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
终点 = (select 城市名称 from b where 城市编码 = a.终点)select * from adrop table a , b/*
id 车次 起点 终点
----------- ---------- -------------------- --------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京(所影响的行数为 4 行)*/
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')
goupdate a set 起点=(select 城市名称 from b where 城市编码=起点),
终点=(select 城市名称 from b where 城市编码=终点)
select * from a
id 车次 起点 终点
----------- ---------- -------------------- --------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京(4 行受影响)
消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。
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')
goupdate A
set 起点 = (select top 1 城市名称 from b where 城市编码 = a.起点 order by 城市名称),
终点 = (select top 1 城市名称 from b where 城市编码 = a.终点 order by 城市名称)
from Aselect * from adrop table a , b/*
id 车次 起点 终点
----------- ---------- -------------------- --------------------
1 k100 杭州 上海
2 k300 杭州 北京
3 D50 广州 上海
4 L80 上海 北京(所影响的行数为 4 行)
*/
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 上海 北京 */