求一条SQL语句的写法(50分)

  • 主题发起人 主题发起人 steven7581
  • 开始时间 开始时间
S

steven7581

Unregistered / Unconfirmed
GUEST, unregistred user!
我在进行一个MIS系统的开发时,有一个问题一直没有解决好。
问题如下:
我有三个表结构
1  ID  姓名   2  ID  年级   3  ID  选修课
   01  张三     01  D02      03  法语
   02  李四     02  D02
   03  王五     03  D02
我从以上这三个表中,我想得到下面这个表
  ID  姓名  年级  选修课
  01  张三  D02
  02  李四  D02
  03  王五  D02   法语
我现在是用内存表,将数据载入后,遍历所有数据后,才可生成,但速度太慢。我想用一个SQL语句求到这个表。请问有什么好的方法没?
分不够可以再加
 
union可以实现的
 
select a.Id ,a.姓名,b.年级,c.选修课 from (表1 a left join 表2 b on a.Id = b.id) left join 表3 c on a.Id = c.Id where ....
 
同意思楼上
 
select table1.Id, 姓名,年级,选修课 from table1 left join table2 on table1.Id=table2.Id left join table3 on table1.Id=table3.Id
 
月冷无痕:
你的方法,只能得到下表
ID  姓名  年级  选修课
  03  王五  D02   法语
不是我想要的啊
 
没办法,你把2表和3表合并成一个表不就 好多了吗?
1  ID  姓名   2  ID  年级  选修课
   01  张三     01  D02   法语
   02  李四     02  D02
   03  王五     03  D02
 
对!用Union试试看
 
表3只有一条记录,没有id=1和2的记录吧!
 
1、
select d.id,d.姓名 ,b.年级,d.选修课 from (select a.*,c.选修课 from table1 a left join table3 c on a.id = c.id ) d ,table3 b
where d.id = b.id
2、
select a.id,a.姓名 ,b.年级, c.选修课 from b join (a left join c on a.id = c.id ) on b.id = a.id
3、
select a.id,a.姓名 ,b.年级, c.选修课 from b , (a left join c on a.id = c.id ) where b.id = a.id
1中如果你的1表和2表也不是一一对应关系,那么可以将上面语句改成 d left join table3 b
on d.id = b.id
2、3中自己修改一下表名
 
select A.ID,A.姓名,B.年級,C.選修課 from 1 A LEFT JOIN 2 B ON A.ID=B.ID LEFT JOIN 3 C ON A.ID=C.ID
 
感谢19801125w,你写的第二条语句,我测试是正确的,谢谢!
 

Similar threads

D
回复
0
查看
924
DelphiTeacher的专栏
D
D
回复
0
查看
879
DelphiTeacher的专栏
D
D
回复
0
查看
851
DelphiTeacher的专栏
D
后退
顶部