求一条简单的 sql,一条 sql 两次并行 inner-join?

2022-05-19 15:35:09 +08:00
 zealinux
有两张表,表 A ,表 B ( goods )

1. 表 A 有两个字段:
a_goods_id ,b_goods_id

两个都对应了表 B 的主键 id 字段

2. 表 B ( goods )里有 name 字段


问:能不能一条 SQL 命令查出 a_goods_name, b_goods_name ?


如果只查出一个,我会写下面的

``` sql
SELECT
name a_goods_name
FROM
goods AS B
INNER JOIN B ON B.id = A.a_goods_id
WHERE
B.id = A.a_goods_id;
```

数据库:Postgresql
740 次点击
所在节点    问与答
5 条回复
sorcerer
2022-05-19 16:20:49 +08:00
这。。第一反应不是 join 两次就好了?
zealinux
2022-05-19 16:55:08 +08:00
@sorcerer 肯定不行,又不是三表关联联查询。
AlkTTT
2022-05-19 17:46:10 +08:00
union all 呗
zealinux
2022-05-19 18:50:16 +08:00
@AlkTTT

结果是两列 ( a_goods_name, b_goods_name )
那不能用 union all
zbinlin
2022-05-21 12:04:05 +08:00
可以 join 两次表 B:
SELECT B1.name AS a_goods_name, B2.name AS b_goods_name FROM A INNER JOIN goods AS B1 ON A.a_goods_id = B1.id INNER JOIN goods AS B2 ON A.b_goods_id = B2.id;

或者使用 subquery:
SELECT (SELECT name FROM goods WHERE goods.id = A.a_goods_id) AS a_goods_name, (SELECT name FROM goods WHERE goods.id = A.b_goods_id) AS b_goods_name FROM A;

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

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

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

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

© 2021 V2EX