A 表:
a_id a_name b_id_1 b_id_2
1 aName 1 2
B 表:
b_id b_name
1 bName1
2 bName2
要求查出表 A 的数据,同时使用 B 表的 b_name 代替 b_id_x
结果:
a_id a_name b_id_1 b_id_2 b_name_1 b_name_2
1 aName 1 2 bName1 bName2
这个需求该怎么写 sql 语句来查询呢,我只知道如果 a 表中只有一个 b 表的 id 时,使用左连接来做,两个就不会了
1
raymanr 2020-10-17 13:00:26 +08:00 1
|
2
ky11223344 2020-10-17 14:04:38 +08:00 1
select a.*, b1.b_name as b_name_1, b2.b_name as b_name2
from A a join B b1 on a.b_id_1 = b1.b_id join B b2 on a.b_id_2 = b2.b_id 这个可行吗? |
3
Bakumon OP |
4
zhangysh1995 2020-10-17 14:21:57 +08:00 1
当 b_id 满足 unique 条件的时候,可以用 scalar function 。B 表的 b_id 加索引。
```` select A.a_id, ( select b_name as b_name_1 from B where b_id = A.b_id_1), ( select b_name as b_name_2 from B where b_id = A.b_id_2), from A; ```` |
5
zhangysh1995 2020-10-17 14:23:37 +08:00
啊名称写错了,应该是 scalar query.
|
6
zhangysh1995 2020-10-17 14:26:17 +08:00
|
7
raymanr 2020-10-17 14:46:25 +08:00
|
9
zhangysh1995 2020-10-17 15:15:57 +08:00
@raymanr 理论上不优化的情况下是滴。因为 A.b_id_x 是和某一行绑定的,所以取一行,就会扫一次 B 做查询。如果 A 有 n 行,B 有 m 行,那就是会扫 2n * m 次。
|