
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 日 |
2 ky11223344 2020 年 10 月 17 日 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 日 当 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 日 啊名称写错了,应该是 scalar query. |
6 zhangysh1995 2020 年 10 月 17 日 |
7 raymanr 2020 年 10 月 17 日 |
9 zhangysh1995 2020 年 10 月 17 日 @raymanr 理论上不优化的情况下是滴。因为 A.b_id_x 是和某一行绑定的,所以取一行,就会扫一次 B 做查询。如果 A 有 n 行,B 有 m 行,那就是会扫 2n * m 次。 |