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

sql查询问题帮帮忙 出新问题
给你个实例子



SQL code
create tanle t1
(
id int primary key identity(1,1),
name1 int not null,
name2 int not null,
name3 int not null
)
insert into ti values(1,2,3)
create tanle t2
(
id int primary key identity(1,1),
name int not null,
)
insert into t2 values ('张三')
insert into t2 values ('李四')
insert into t2 values ('王五')

假如 队员表里面为空 不就查不到这条数据了么 我也想列出来  有什么办法





我想查出的结果就是  

name1 name2 name3
张三 李四 王五

这种的 但是我用多表查询不好使  
SQL code
select t2.name as n1,t2.name as n2,t2.name as n3 from t1,t2 where t1,name1=t2.id and t1,name2=t2.id and t1,name3=t2.id


我知道这个方法不行 举个例子

假如 第一个人 不就查不到这条数据了么 有什么办法

------解决方案--------------------
go
if OBJECT_ID('t1')is not null
drop table t1
go
create table t1 (
id int primary key identity(1,1), 
name1 int not null, 
name2 int not null, 
name3 int not null ) 
go
insert into t1 values(1,2,3) 
go
if OBJECT_ID('t2')is not null
drop table t2
go
create table t2 ( 
id int primary key identity(1,1), 
name varchar(20) not null

go
insert into t2 values ('张三') 
insert into t2 values ('李四') 
insert into t2 values ('王五')


/*
--我想查出的结果就是 
name1 name2 name3
张三 李四 王五
*/

select *from t1
--方法一:
select 
name1=a.name,name2=b.name,name3=c.name
from t1
left join t2 a on t1.name1=a.id
left join t2 b on t1.name2=b.id
left join t2 c on t1.name3=c.id

--方法二:
select 
name1=MAX(case when num='name1' then name else '' end),
name2=MAX(case when num='name2' then name else '' end),
name3=MAX(case when num='name3' then name else '' end)
from(
select a.name as num,t2.name as name from
(
select name1 as ID,name='name1' from t1
union all
select name2 as ID,name='name2' from t1
union all
select name3 as ID,name='name3' from t1
)a
inner join t2 on t2.id=a.ID)b