我写了这个查询:
select *
from user.bet_lang_translation trans
inner join (
select id, fixture_id, name, price, status
from user.bet
where bet.status = 'open'
) res
on trans.bet_id = res.id
结果是这样的:
|bet_id |name |bits |id |fixture_id|name|price |status|
|-----------------|---------|---------------------|-----------------|----------|----|--------|------|
|14861177884454004|goal_diff|000000000010000000000|14861177884454004|4454004 |X |4.000000|open |
|14861177184454004|goal_diff|111111111100000000000|14861177184454004|4454004 |2 |1.750000|open |
|14861177174454004|goal_diff|000000000001111111111|14861177174454004|4454004 |1 |4.200000|open |
我的目的是现在将查询结果与自身连接两次,以便为每个灯具进行所有bet_id
的唯一组合。也许这也可以与CROSS JOIN一起使用。
为了获得一种组合,我尝试将其添加到查询的底部:
inner join res as a
on res.fixture_id = a.id
但出现错误:[42P01] ERROR: relation "res" does not exist
。
我知道这是因为查询的两个部分是并行执行的,所以不能交叉引用。我已经读过有关LATERAL
的信息,但不确定是否对我有帮助。
有什么想法可以在这里实现我所需要的吗?
答案 0 :(得分:2)
要阐明CTE如何完成您想做的事情:
WITH res AS (
SELECT id, fixture_id, name, price, status
FROM user.bet
WHERE bet.status = 'open'
)
SELECT *
FROM user.bet_lang_translation trans
JOIN res res1 ON trans.bet_id = res1.id
JOIN res res2 ON res1.fixture_id = res2.id;
仅计算一次CTE,然后将其实现,如果您想使用两次,这将非常有效。