2 mjc102030 mjc102030 于 2016.02.16 14:19 提问

一条SQL的写法,菜鸟提问

式样要求从A表里取出所有项目,并且从B,C,D,E 4张表里取出和A表的nodeid相同的device这个字段。

我的想法是用t1 left join (select nodeid ,device from t2 union select nodeid ,device from t3 union select nodeid ,device from t4 union select nodeid ,device from t5) t6 on t1.nodeid = t6.nodeid

这样可以试想需求么,另外性能是不是最优的呢

4个回答

bdmh
bdmh   Ds   Rxr 2016.02.16 14:28

直接连续几个inner join就行了
select * from A inner join B on B.id=A.id inner join C on C.id=A.id inner join D on D.id=A.id

mjc102030
mjc102030 就是B,C,D,E表都是专门管理device的表,A里的nodeid一定跟这4张表里的nodeid有对应的,我要怎么查询A表内容的同时从这4张表里查询出nodeid对应的device整体作为结果集呢
接近 2 年之前 回复
mjc102030
mjc102030 那查询内容那块怎么确定是从B,C,D,E哪个表里取出的device呢
接近 2 年之前 回复
u011067688
u011067688   2016.02.16 15:13

SELECT
A.*, B.DEVICE, C.DEVICE, D.DEVICE, E.DEVICE
FROM A
LEFT JOIN B ON A.NODEID=B.NODEID
LEFT JOIN C ON A.NODEID=C.NODEID
LEFT JOIN D ON A.NODEID=D.NODEID
LEFT JOIN E ON A.NODEID=E.NODEID

mjc102030
mjc102030 回复咚咚swwadaw: 是bcde表union么
接近 2 年之前 回复
u011067688
u011067688 把BCDE表整合成一个表,另外添加一个字段区分不同设备,就好了
接近 2 年之前 回复
u011067688
u011067688 回复取名字好难: 最好把BCDE表整合成一个表,什么都解决了
接近 2 年之前 回复
mjc102030
mjc102030 不不不,你理解错了,最后显示的device是B,C,D,E表某一个里边的,就是B,C,D,E表是不同的device管理表,一个nodeid在这4张表里,只存在一条对应数据
接近 2 年之前 回复
u010717662
u010717662   2016.02.16 15:29

最好直接都用left join 少用子查询

mjc102030
mjc102030 可能是我对表结构没有表达清楚....就是B,C,D,E4张表是不同设备的管理表,A表里边的nodeid在这4张表里只存在一条对应的device数据,,我想要的是结果集里,A表的nodeid有一个device,不管是从哪个表取出来的,都用left join的话,没有办法取得对应的device的吧
接近 2 年之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.16 22:11

使用连表查询,比较四个表中的字段

mjc102030
mjc102030 回复Mr_dsw: 我问的想法是bcde表全部union,就像在问题里说的一样,可以么
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!