日期:2014-05-18  浏览次数:20518 次

大家好,请教一个问题
我现在有3张表,结构如下

A 表
type pid name
B 1 aa
B 2 bb
C 1 cc


B
id phoneB
1 010-12345678
2 011-12345678

C
id phoneC
1 012-12345678

现在想要输出的结果是
name phone
aa 010-12345678
bb 011-12345678
cc 012-12345678

数据库是sql server r2的



------解决方案--------------------
SQL code

select a.name,b.phone from a join b on a.pid=b.id and a.type='b'
union all
select a.name,c.phone from a join b on a.pid=c.id and a.type='c'

------解决方案--------------------
SQL code
select
  a.name,b.phone
from
  a,
  (select id,phoneb as phone from b union all select id,phonec as phone from c)b
where
  a.id=b.id

------解决方案--------------------
SQL code

SELECT A.NAME,B.PHONEB AS PHONE
FROM A INNER JOIN B ON A.PID = B.ID 
WHERE A.TYPE = 'B'
UNION ALL
SELECT A.NAME,C.PHONEC 
FROM A INNER JOIN C ON A.PID = C.ID
WHERE A.TYPE = 'C'

------解决方案--------------------
SQL code
select a.name,b.phone from a join b on a.pid=b.id and a.type='b'
union all
select a.name,c.phone from a join b on a.pid=c.id and a.type='c'

------解决方案--------------------
SQL code
select a.name,b.phone
from a
join
(select 'b' as type,id,phoneb as phone from b
 union all
 select 'c' as type,id,phonec as phone from c
) b
on a.type=b.type and a.pid=b.id

------解决方案--------------------
SQL code
----------------------------
-- Author  :fredrickhu(小F,向高手学习)
-- Date    :2011-11-10 13:47:55
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86) 
--    Apr 22 2011 11:57:00 
--    Copyright (c) Microsoft Corporation
--    Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)
--
----------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([type] varchar(1),[pid] int,[name] varchar(2))
insert [A]
select 'B',1,'aa' union all
select 'B',2,'bb' union all
select 'C',1,'cc'
--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go 
create table [B]([id] int,[phoneB] varchar(12))
insert [B]
select 1,'010-12345678' union all
select 2,'011-12345678'
--> 测试数据:[C]
if object_id('[C]') is not null drop table [C]
go 
create table [C]([id] int,[phoneC] varchar(12))
insert [C]
select 1,'012-12345678'
--------------开始查询--------------------------
select
   a.name,b.phone
from
  (select px=row_number()over(order by getdate()),* from a)a,
  (select px=row_number()over(order by getdate()),* from(select id,phoneb as phone from b union all select id,phonec as phone from c)t)b
where
  a.px=b.px
----------------结果----------------------------
/* name phone
---- ------------
aa   010-12345678
bb   011-12345678
cc   012-12345678

(3 行受影响)

*/