SQL 数据库多表联查,不是很懂,帮帮忙

2018-05-14 23:23:16 +08:00
 luhuan97
A 表
id B_id1 B_id2 ...其他字段
1 1 2

B 表
id name
1 小明
2 大明

如何用 SQL 语句查询 A 表中的所有字段,还有 A 表记录对应 B 表的 name。
数据可没学好,现在急用,各位帮帮忙
2208 次点击
所在节点    数据库
26 条回复
Eugene1024
2018-05-14 23:39:02 +08:00
建议 LZ 百度下连接查询,自己再操作两边,应该就可以搞定了
wellsc
2018-05-14 23:45:21 +08:00
工作中其实很少用到 join
alcarl
2018-05-15 07:52:12 +08:00
搞统计得经常用呀,做联机的用的少一些
darrenxyli
2018-05-15 08:11:53 +08:00
"工作中其实很少用到 join"...
CFO
2018-05-15 08:16:41 +08:00
@wellsc 请教下用的多的是什么?
hubahuba
2018-05-15 08:21:28 +08:00
@CFO 其实还是用的挺多的,因为这涉及到表设计。那还是分人的,如果懒一些就直接,多建一些表就行了。但是你对自己要求高一些,那设计表的时候就要设计好,如何关联查询了。最终目的无非就是渠道数据而已,不必纠结。但是如果你去面试的时候,直接说,我就是一堆表直接查。那就比较尴尬了。
hubahuba
2018-05-15 08:22:01 +08:00
其实还是用的挺多的,因为这涉及到表设计。那还是分人的,如果懒一些就直接,多建一些表就行了。但是你对自己要求高一些,那设计表的时候就要设计好,如何关联查询了。最终目的无非就是渠道数据而已,不必纠结。但是如果你去面试的时候,直接说,我就是一堆表直接查。那就比较尴尬了。
FrailLove
2018-05-15 08:22:09 +08:00
SELECT b.name,a.* FROM a LEFT JOIN b ON a.id=b.id
woscaizi
2018-05-15 08:23:13 +08:00
a 表中 b_id 是横向扩展的吗?
msg7086
2018-05-15 08:33:18 +08:00
@CFO 分开成两次查询效率可能会更高。
ldw4033
2018-05-15 08:36:40 +08:00
select a.*
,(select b.name from B b where b. id=a.B_id1) name1
,(select b.name from B b where b. id=a.B_id2) name2
from A a

楼主这里连接的是 2 个 B 表 ID 啊
panpanpan
2018-05-15 08:56:31 +08:00
@ldw4033 为什么不用关联查询,效率更高啊。
select a.*,b1.name,b2.name from A a
left join B b1 on a.B-id1 = b1.id
left join B b2 on a.B-id2 = b2.id
carakan
2018-05-15 09:00:37 +08:00
"工作中其实很少用到 join"...

因为 join 数据量大了效率不行?

还是说...后期维护复杂?
popil1987
2018-05-15 09:06:21 +08:00
vjnjc
2018-05-15 09:10:41 +08:00
楼主是怕效率问题还是一点都不会,如果不会的话用 12 楼的方法就可以啦
yufpga
2018-05-15 09:11:04 +08:00
@carakan 数据量上来了,涉及到分库分表,使用 join 查询就会很麻烦,扩展性不好。
oppoic
2018-05-15 10:39:42 +08:00
@CFO “单表开发,运维扩容” 这个是主流的,单表的效率很高。
大型项目,运维比开发做的工作多多了。
carakan
2018-05-15 11:12:18 +08:00
我一般都是这样

left join B b1 on a.B-id1 = b1.id



left join B b1 on a.B-id1 = b1.id
left join B b2 on a.B-id2 = b2.id

这样写的好处是???
Alexhohom
2018-05-15 11:22:17 +08:00
两个 left join
select a.*,b.name,c.name
from a
left join B b on b.id = a.B_id1
left join B c on c.id = a.B_id2
banks0913
2018-05-15 11:29:26 +08:00
@yufpga 那一般扩展性好的方案是啥样?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454849

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX