首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个表关联查询有关问题【100分】

2013-01-02 
一个表关联查询问题【100分求助】?表1:------------------------------ 【人事表】表名:【Man】字段: Man_Id,Man

一个表关联查询问题【100分求助】?
表1:------------------------------ 【人事表】
     表名:【Man】
     字段: Man_Id,Man_Name,Zw_Id
              1     张飞       2
              2     曹操       1

表2:------------------------------ 【职务表】
     表名:【Zw】
     字段: Zw_Id,Zw_Name
              1     校长 
              2     班主任

表3:------------------------------ 【工资表】
     表名:【Zw】
     字段: Man_Id,Money
              1    2500
              2    4000

需要的------------------------------- 【查询结果】:

     Man_Id,Man_Name,Zw_Id,Zw_Name,Money
       1      张飞     2    班主任   2500
       2      曹操     1     校长    4000

------------------------------------------ 【要求】

1、一条Sql语句
2、而且是Select语句,不用With
3、愿出100分谢谢各位!




[解决办法]


SELECT A.MAN_ID,A.MAN_NAME,A.ZW_ID,B.ZW_NAME,C.MONEY FROM MAN A
LEFT JOIN ZW B ON A.ZW_ID=B.ZW_ID
LEFT JOIN GZ C ON A.MAN_ID=C.MAN_ID


工资表名与职务表名相同了,这里我用GZ代替了。
[解决办法]
select a.man_id,man_name,b.zw_id,zw_name,c.money
from man as a inner join zw as b on a.zw_id=b.zw_id inner join gz as c on a.man_id=c.man_id
[解决办法]
----------------------------
-- Author  :TravyLee(物是人非事事休,欲语泪先流!)
-- Date    :2012-12-11 10:35:32
-- Version:

--      Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) 

--Feb 10 2012 19:13:17 

--Copyright (c) Microsoft Corporation

--Enterprise Edition: Core-based Licensing on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)

--
----------------------------
--> 测试数据:[Man]
if object_id('[Man]') is not null drop table [Man]
go 
create table [Man]([Man_Id] int,[Man_Name] varchar(4),[Zw_Id] int)
insert [Man]
select 1,'张飞',2 union all
select 2,'曹操',1
--> 测试数据:[Zw]
if object_id('[Zw]') is not null drop table [Zw]
go 
create table [Zw]([Zw_Id] int,[Zw_Name] varchar(6))


insert [Zw]
select 1,'校长' union all
select 2,'班主任'
--> 测试数据:[Gz]
if object_id('[Gz]') is not null drop table [Gz]
go 
create table [Gz]([Man_Id] int,[Money] int)
insert [Gz]
select 1,2500 union all
select 2,4000
go

select
a.Man_Id,
Man_Name,
b.Zw_Id,
Zw_Name,
Money 
from 
 [Man] a 
inner join 
[Zw] b 
on 
a.Zw_Id=b.Zw_Id
inner join 
[Gz] c 
on 
a.Man_Id=c.Man_Id
/*
Man_IdMan_NameZw_IdZw_NameMoney
-----------------------------------------------------
1张飞2班主任2500
2曹操1校长4000
*/


[解决办法]
看看书,基础的东西。
[解决办法]
left join 是因为有些人没职务或者没工资,这样出来的数据就会有null。
[解决办法]
select
    Man_Id,Man_Name,sex_name,Zw_Name,Money
from(
select
    a.Man_Id,
    Man_Name,
    b.Zw_Id,
    Zw_Name,
    Money ,
    Sex_Id
from 
 [Man] a 
inner join 
    [Zw] b 
on 
    a.Zw_Id=b.Zw_Id
inner join 
    [Gz] c 
on 
    a.Man_Id=c.Man_Id
)t
inner join xb m
on m.Sex_Id=t.Sex_Id

[解决办法]
工资表里带性别 ,真有你的 。又搞错了吧??
[解决办法]
select a.man_id,man_name,d.sex_name,zw_name,c.money
 from man as a inner join zw as b on a.zw_id=b.zw_id inner join gz as c on a.man_id=c.man_id  inner join xb as d on c.sex_id=d.sex_id
再试试
[解决办法]
引用:
引用:工资表里带性别 ,真有你的 。又搞错了吧??

我只是举个例子,要不怕说不清,呵呵 !

按以上提供的2个代码,都查不到数据。


你把9楼给忽略了??
[解决办法]
没数据 说明表里数据有问题。 或者全部改成 left join 

热点排行