求助:多表关联,请高手指教,如何写SQL?(重点是要把没有缴费的人名,也要列举出来)
原表是ABCD四张表 | |||||||
A表 | |||||||
学号 | 姓名 | 性质 | 分组 | ||||
A001 | 张三 | 气球 | 一组 | ||||
A005 | 李四 | 足球 | 一组 | ||||
A002 | 王五 | 足球 | 一组 | ||||
A003 | 赵六 | 足球 | 二组 | ||||
A004 | 张七 | 气球 | 二组 | ||||
B表 | |||||||
分组 | 地址 | ||||||
一组 | 学校A区 | ||||||
二组 | 到人小去 | ||||||
C表 | |||||||
缴费情况 | 分组 | 学号 | |||||
JF001 | 一组 | A001 | |||||
JF002 | 一组 | A002 | |||||
JF003 | 二组 | A004 | |||||
D表 | |||||||
缴费情况 | 学号 | 型号 | 金额 | ||||
JF001 | A001 | QQ-A | 5 | ||||
JF001 | A001 | QQ-B | 8 | ||||
JF001 | A001 | QQ-C | 10 | ||||
JF002 | A002 | ZQ-A | 25 | ||||
JF002 | A002 | ZQ-B | 30 | ||||
JF002 | A002 | ZQ-C | 50 | ||||
JF003 | A004 | QQ-B | 16 | ||||
JF003 | A004 | QQ-C | 30 | ||||
需要通过SQL,得到结果表 | |||||||
分组 | 学号 | 姓名 | 缴费情况 | 型号 | 金额 | 性质 | 地址 |
一组 | A001 | 张三 | JF001 | QQ-A | 5 | 气球 | 学校A区 |
一组 | A001 | 张三 | JF001 | QQ-B | 8 | 气球 | 学校A区 |
一组 | A001 | 张三 | JF001 | QQ-C | 10 | 气球 | 学校A区 |
一组 | A002 | 王五 | JF002 | ZQ-A | 25 | 足球 | 学校A区 |
一组 | A002 | 王五 | JF002 | ZQ-B | 30 | 足球 | 学校A区 |
一组 | A002 | 王五 | JF002 | ZQ-C | 50 | 足球 | 学校A区 |
一组 | A005 | 李四 | 足球 | 学校A区 | |||
二组 | A004 | 张七 | JF003 | QQ-B | 16 | 气球 | 到人小去 |
二组 | A004 | 张七 | JF003 | QQ-C | 30 | 气球 | 到人小去 |
二组 | A003 | 赵六 | 足球 | 到人小去 | |||
SELECT * FROM (SELECT * a.分组, a.学号, a.姓名, '缴费情况', '型号', '金额', a.性质, b.地址 FROM a LEFT JOIN b ON a.分组 = b.分组 WHERE a.学号 NOT IN (SELECT c.学号 FROM c) UNION SELECT a.分组, a.学号, a.姓名, d.缴费情况, d.型号, d.金额, a.性质, b.地址 FROM a LEFT JOIN b ON a.分组 = b.分组 LEFT JOIN c ON a.学号 = c.学号 RIGHT JOIN d ON a.学号 = d.学号) ORDER BY 分组######回复 @tqyin : 哎呀!高手啊!谢谢您!我咋没有想到把 没有缴费的人员单独筛选出来 union all 进去呢? 太感谢了,谢谢老师!######回复 @pargy : 修改了SQL再看看######您这个SQL,还是出不来没有缴费的人员姓名那两行。 我刚才测试了一下,谢谢您!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。