【发布时间】:2019-04-26 09:59:35
【问题描述】:
我正在 PostgreSQL 中编写一个 SQL 语句,我在其中加入来自不同表的数据,这些表中的每个表都通过其 id 上的外键连接。表 b 有一个字段 a_id 与表 a 的 id 等相关。
我的问题是我想在 WHERE 子句中重用连接表中的值,而不必再次执行所有 JOIN,如下所示:
SELECT *
FROM a
INNER JOIN b ON b.a_id = a.id
INNER JOIN c ON c.b_id = b.id
WHERE a.id = 3
AND a.x =
(SELECT c.y
FROM a
INNER JOIN b ON b.a_id = a.id
INNER JOIN c ON c.b_id = b.id
WHERE a.id = 3
AND c.id = 5)
我敢打赌,这个 sn-p 有一个更简单的解决方案,我只是没有意识到。如果有人可以帮助我,我会很高兴。
【问题讨论】:
-
你能举个例子吗?
-
惰性解决方案:cte.
-
PostgreSQL 还支持 LATERAL Subqueries/JOINs ,这在这种情况下也可能有用。但如果没有示例数据和预期结果,很难确定。请参阅 Why should I provide an MCVE for what seems to me to be a very simple SQL query?
标签: sql postgresql join