求助,多对一关联(多列对一列),如何写查询代码,谢谢!

pargy 发布于 2015/09/10 10:47
阅读 190
收藏 0
A表
banji yuwen shuxue
一年级一班 100001 100006
一年级二班 100002 100003
一年级三班 100001 100004
一年级四班 100005 100003
一年级五班 100002 100004
一年级六班 100005 100006
B表
laoshixuehao   xingming nianling
100001 张三 25
100002 李四 45
100003 王五 28
100004 赵六 50
100005 吴七 40
100006 刘八 48
求sql查询得下表
banji 语文老师姓名 年龄 数学老师姓名 年龄




使用了 如下,结果不行。求助
select *****
from  A as yu,a as shu,b
where
yu.yuwen = b.laoshixuehao
or shu.shuxue = b.laoshixuehao
加载中
0
摆渡者
摆渡者

为了方便,我的表没有使用中文了,我这里两个表分别是banji和laoshi,其中A表里面的banji字段值用1.1, 1.2, 1.3……来表示的。

先看看表数据:

  

我写了两个SQL,供你参考:

1. 使用联合查询,即连续两次join老师表:

2. 使用子查询,即先join一次老师表,找出语文老师的年龄和姓名,在以同样的方式找数学老师的年龄和姓名:

二者都能取得同样的结果,只是联合查询好理解一些而已。完整的SQL如下:

1. 联合查询:

select b.banji, y.xingming as yxingming, y.nianling as ynianling,
s.xingming as sxingming, s.nianling as snianling
from banji b join laoshi y on b.yuwen=y.xuehao
join laoshi s on b.shuxue=s.xuehao order by b.banji asc;

2. 子查询:

select sub.banji, sub.yuwen, sub.ynianling, 
l2.xingming as sxingming, l2.nianling as snianling from 
(select b.banji, l.xingming as yuwen, l.nianling as ynianling, b.shuxue
 from banji b join laoshi l on b.yuwen=l.xuehao) as sub
join laoshi as l2 on sub.shuxue=l2.xuehao order by sub.banji asc;
0
随风逐流
随风逐流

oracle写法:

select A表.banji,(select B表.姓名 from B表 where B表.laoshixuhao = A表.yuwen)

语文老师姓名,

(select B表.姓名 from B表 where B表.laoshixuhao = A表.shuxue)

数学老师姓名,

(select B表.nianling from B表 where B表.laoshixuhao = A表.yuwen)

语文老师年龄,

,(select B表.nianling from B表 where B表.laoshixuhao = A表.shuxue)

数学老师年龄

 from A表;

p
pargy
谢谢!非常感谢!
0
p
pargy

引用来自“这昵称牛逼”的评论

为了方便,我的表没有使用中文了,我这里两个表分别是banji和laoshi,其中A表里面的banji字段值用1.1, 1.2, 1.3……来表示的。

先看看表数据:

  

我写了两个SQL,供你参考:

1. 使用联合查询,即连续两次join老师表:

2. 使用子查询,即先join一次老师表,找出语文老师的年龄和姓名,在以同样的方式找数学老师的年龄和姓名:

二者都能取得同样的结果,只是联合查询好理解一些而已。完整的SQL如下:

1. 联合查询:

select b.banji, y.xingming as yxingming, y.nianling as ynianling,
s.xingming as sxingming, s.nianling as snianling
from banji b join laoshi y on b.yuwen=y.xuehao
join laoshi s on b.shuxue=s.xuehao order by b.banji asc;

2. 子查询:

select sub.banji, sub.yuwen, sub.ynianling, 
l2.xingming as sxingming, l2.nianling as snianling from 
(select b.banji, l.xingming as yuwen, l.nianling as ynianling, b.shuxue
 from banji b join laoshi l on b.yuwen=l.xuehao) as sub
join laoshi as l2 on sub.shuxue=l2.xuehao order by sub.banji asc;

谢谢您!

摆渡者
摆渡者
不客气哈
返回顶部
顶部