SQL子查询问题,"错误:对FROM子句条目的无效引用......"

sco*_*tkf 5 sql postgresql subquery

遇到SQL问题(目前使用postgresql)

我有这个查询,因为我需要比较最近的项目和第二个最近的项目:

SELECT p1.*, p2.price_cents FROM "prices" p1 
  INNER JOIN 
    (
      SELECT price_cents, game_id from prices as p WHERE p.game_id = p1.game_id 
        ORDER BY p.created_at DESC LIMIT 1 OFFSET 1
    )
  p2 ON p2.game_id = p1.game_id 
Run Code Online (Sandbox Code Playgroud)

这会产生一些错误:

ERROR:  invalid reference to FROM-clause entry for table "p1"
LINE 1: ...AND p.game_id = p1.game_id...
                           ^
HINT:  There is an entry for table "p1", but it cannot be referenced from this part of the query.
Run Code Online (Sandbox Code Playgroud)

有什么理由我无法从该子选择访问p1,这是一个存在问题,因为,p1的数据还没有?有没有另一种方法来加入JOIN?

haz*_*zik 3

试试这个

SELECT p1.*, (
    SELECT price_cents 
    FROM "prices" p 
    WHERE p1.game_id = p.game_id  
    ORDER BY p.created_at DESC LIMIT 1 OFFSET 1
) as price_cents 
FROM "prices" p1 
Run Code Online (Sandbox Code Playgroud)

根据作者评论更新

如果您需要最近第二个条目中的多列,您可以尝试以下代码片段

SELECT * FROM (
    SELECT p.*, (
        SELECT id 
        FROM "prices" 
        WHERE p.game_id = game_id  
        ORDER BY created_at DESC LIMIT 1 OFFSET 1
    ) AS second_id 
    FROM "prices" p
) p1 INNER JOIN "prices" p2 ON p1.second_id = p2.id
Run Code Online (Sandbox Code Playgroud)

  • @PeerBr OP 尝试从 JOIN 语句中访问 p1,该语句无权访问它所连接的其他表。 (2认同)