求一SQL查询语句(急!)
有好几个表,比如:
表一:性别(性别代号 性别)两个字段
表二:学历(学历代号 学历)两个字段
表三:信息(姓名,性别代号,学历代号)而且这几个字段允许为空
我现在想得到这样的表
综合表(姓名,性别,学历)
应该怎么写SQL语句
问题点数:100、回复次数:25Top
1 楼sunjian_qi(sonne)回复于 2005-06-01 15:49:02 得分 10
select t1.姓名,t2.性别,t3.学历
from [信息] t1
left join [性别] t2 on t2.[性别代号]=t1.[性别代号]
left join [学历] t3 on t3.[学历代号]=t1.[学历代号]Top
2 楼mao1997(xs)回复于 2005-06-01 15:51:44 得分 0
同意楼上Top
3 楼icedut(冰-装修准备中)回复于 2005-06-01 15:58:12 得分 0
表一:性别(性别代号 性别)两个字段
性别还要分一个表么
有点浪费啊
Top
4 楼Truly()回复于 2005-06-01 16:02:59 得分 0
现在科技发达了,性别的类型也就多了:DTop
5 楼brando_beat(Eの懒龙)回复于 2005-06-01 16:13:06 得分 0
select c.姓名,a.性别,b.学历
from 性别 a,学历 b,信息 c
where c.学历代号=b.学历代号 and c.性别代号=a.性别代号
sql_server2000写法Top
6 楼zhangjianhong(独零)回复于 2005-06-01 16:14:27 得分 0
用点心学吧!
select * from stud
Name SexID XueId
---------- ---------- ----------
张三 01 01
李花 02 03
--------------------------------------
---------------------------------------
select * from sex
sexID sex
---------- ----------
01 男
02 女
----------------------------------------------
----------------------------------------------
select * from xue
XueId XueLi
---------- ----------
01 专科
02 本科
03 硕士
------------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------
select stud.[Name],sex,XueLi From stud,SEX,xue where stud.sexID=sex.SEXID and stud.XueId=xue.XueId
Name sex XueLi
---------- ---------- ----------
张三 男 专科
李花 女 硕士Top
7 楼chxljtt(浮云何时飞)回复于 2005-06-01 16:18:22 得分 0
select c.姓名 as 姓名,a.性别 as 性别,b.学历 as 学历
from 性别 a,学历 b,信息 c
where c.学历代号=b.学历代号 and c.性别代号=a.性别代号
最简单的写法但是效率不高!Top
8 楼hulsq(小斌)回复于 2005-06-01 16:29:40 得分 10
select x.姓名,(select 性别 from 性别 s where s.性别代号=x.性别代号) as 性别,
(select 学历 from 学历 xl where xl.学历代号=x.学历代号) as 学历 from 信息 x
可以采用以上这种子查询的方法,也可以采用左连接的的方法,不过要注意左连接是表的位置,最要不要才用内连接,如果有空值,将会丢失数据Top
9 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-06-01 16:38:22 得分 0
楼上说的都可以,你随便找个就行了,
不过性别没必要再分表了吧?最多三种,男女未知,最多再来个阴阳人:D
呵呵,在程序里写case就可以了Top
10 楼liuyu202(学无止境)回复于 2005-06-01 16:39:38 得分 0
同意楼上!Top
11 楼luyanpeng(新手学习中....)回复于 2005-06-01 16:41:12 得分 10
select t1.姓名,t2.性别,t3.学历
from t4[信息]
INNER JOIN t1,t2,t3
ON t4.[姓名代号] = t1.[姓名代号],t4.[性别代号] = t2.[性别代号],t4.[学历代号] = t3.[学历代号]
只列出关联字段!Top
12 楼leib_0474(夜之絮语)回复于 2005-06-01 16:54:18 得分 0
恩,不错不错。哈哈Top
13 楼icedut(冰-装修准备中)回复于 2005-06-01 17:03:54 得分 0
现在科技发达了,性别的类型也就多了:D
这句蛮有意思的
:)Top
14 楼icedut(冰-装修准备中)回复于 2005-06-01 17:05:51 得分 0
随便找一句回复就能解决你的问题了
楼主结铁吧
不然大家该讨论性别表了 呵呵Top
15 楼chilin(永恒的月亮)回复于 2005-06-01 17:15:35 得分 0
如果性别代号和学历代号可以空的话只能用左联,1楼正解Top
16 楼Jeffeng(小峰)回复于 2005-06-01 17:26:09 得分 10
应当用:
select t1.姓名,t2.性别,t3.学历
from [信息] t1
left join [性别] t2 on t2.[性别代号]=t1.[性别代号]
left join [学历] t3 on t3.[学历代号]=t1.[学历代号]
如果用:
select c.姓名 as 姓名,a.性别 as 性别,b.学历 as 学历
from 性别 a,学历 b,信息 c
where c.学历代号=b.学历代号 and c.性别代号=a.性别代号
那么在[信息]表中,学历代号和性别代号为空的记录会丢失。Top
17 楼huwei2003(凡)回复于 2005-06-01 17:52:10 得分 10
select t1.姓名,t2.性别,t3.学历
from [信息] t1
left join [性别] t2 on t2.[性别代号]=t1.[性别代号]
left join [学历] t3 on t3.[学历代号]=t1.[学历代号]
--------------------------------------------------------
select t1.姓名,t2.性别,t3.学历
from [信息] t1
inner join [性别] t2 on t2.[性别代号]=t1.[性别代号]
inner join [学历] t3 on t3.[学历代号]=t1.[学历代号]
--------------------------------------------------------
Top
18 楼Truly()回复于 2005-06-01 20:36:19 得分 0
select t1.姓名,
CASE [性别代号]
WHEN '01' THEN '男'
WHEN '02' THEN '女'
WHEN '03' THEN '不男不女'
WHEN '04' THEN '半男半女'
ELSE '未知'
END AS 性别,t3.学历
from [信息] t1
left join [学历] t3 on t3.[学历代号]=t1.[学历代号]
Top
19 楼Truly()回复于 2005-06-01 20:45:15 得分 0
楼主看清了,上面凡是inner join的错,凡是一条select的错
一条select的条件应为
where ( stud.XueId=xue.XueId or stud.XueId is null)Top
20 楼Truly()回复于 2005-06-01 20:46:03 得分 0
使用子查询的更是菜Top
21 楼pgy8288(Just Coding)回复于 2005-06-01 20:51:59 得分 0
看起来简单的,但是好象挺多分歧的哦
Top
22 楼microli(小李)回复于 2005-06-03 09:05:18 得分 50
利用左联是可以的,Top
23 楼yishan116(哈哈)回复于 2005-06-03 09:11:35 得分 0
就是连表咯,同意楼上的。。。。。。。。。。。。Top
24 楼TCat(蚊子)回复于 2005-06-03 09:12:11 得分 0
Truly(NULL) 写法很是友好的Top
25 楼ghchen()回复于 2005-06-03 09:12:23 得分 0
呵呵,学习.......Top




