A表:
发出地 接收地
南京 上海
上海 北京
. .
. .
. .
b表
1 上海
2 南京
3 北京
现在要显示:
发出地 接收地
2 1
1 3
. .
. .
. .
------解决方案--------------------
select B.地区ID AS 发出地,C.地区ID AS 接收地
FROM A表 A LEFT JOIN b表 B ON A.发出地=B.地名
LEFT JOIN b表 C ON A.接收地=C.地名
------解决方案--------------------
update table1 set 发出地=b.id from table2 b where 发出地=b.地区
update table1 set 接收地=b.id from table2 b where 接收地=b.地区
select * from table1
------解决方案--------------------
create table A(发出地 nvarchar(10), 接收地 nvarchar(10))
insert A select '南京 ', '上海 '
union all select '上海 ', '北京 '
create table B(id int, col nvarchar(10))
insert B select 1, '上海 '
union all select 2, '南京 '
union all select 3, '北京 '
select 发出地=tmpA.id, 接收地=tmpB.id from A
left join B as tmpA on A.发出地=tmpA.col
left join B as tmpB on A.接收地=tmpB.col
--result
发出地 接收地
----------- -----------
2 1
1 3
(2 row(s) affected)
------解决方案--------------------
select (select id from b表 where name = a.发出地) '发出地 ', (select id from b表 where name = a.接收地) '接收地 ' from A表
------解决方案--------------------
select t1.id as 发出地 , t2.id as 接收地
from a inner join b t1 on a.发出地 = t1.名称
inner join b t2 on a.接收地 = t2.名称
------解决方案--------------------
--使用自定义函数
create table a(出发地 varchar(10),接收地 varchar(10))
insert into a
select '北京 ', '南京 '
union all select '南京 ', '上海 '
union all select '上海 ', '北京 '
go
create table b(id int ,name varchar(10))
insert into b
select 1 , '上海 '
union all select
2, '南京 '
union all select
3 , '北京 '
go
create function getid(@name varchar(10))
returns int
as
begin
declare @id int
select @id=id from b where [email protected]
return @id
end
go
select dbo.getid(出发地) as 出发地,dbo.getid(接收地) as 接收地 from a
drop function getid
drop table a
drop table b
--结果
出发地 接收地
3 2
2 1
1 3