加入子查询的所有结果

问题描述 投票:0回答:1

所以我想LEFT JOIN至少由多个列之一引用的所有文件:

SELECT
    ...
FROM
    O o
    LEFT JOIN binary_stream_value bsv ON o.binary_stream_value_id = bsv.id
    LEFT JOIN artwork art ON o.artwork_id = art.id
    LEFT JOIN (SELECT f.id FROM file f WHERE f.id = bsv.file_id OR f.id = art.file_id) f ON TRUE
    ...

此操作失败,

ERROR:  invalid reference to FROM-clause entry for table "bsv"
LINE 212: ...  LEFT JOIN (SELECT f.id FROM file f WHERE f.id = bsv.file_i...
                                                               ^
HINT:  There is an entry for table "bsv", but it cannot be referenced from this part of the query.

诚然,我一半希望这会失败,一半希望我错了。

编写这样的查询的正确方法是什么?

sql postgresql join left-join postgresql-9.6
1个回答
0
投票
SELECT ... FROM O o LEFT JOIN binary_stream_value bsv ON o.binary_stream_value_id = bsv.id LEFT JOIN artwork art ON o.artwork_id = art.id LEFT JOIN LATERAL (SELECT f.id FROM file f WHERE f.id = bsv.file_id OR f.id = art.file_id) f ON TRUE ...
© www.soinside.com 2019 - 2024. All rights reserved.