日期:2014-05-19  浏览次数:20766 次

请教一个简单的SQL语句写法,谢谢~
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 name=@name
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