“SQL子查询问题”;错误:对FROM子句条目的引用无效…”;

“SQL子查询问题”;错误:对FROM子句条目的引用无效…”;,sql,postgresql,subquery,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

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 
这会产生一些错误:

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.
是否有任何原因我无法从该子选择访问p1,是否存在问题,如p1的数据尚不可用?有没有其他方法可以通过连接实现这一点?

试试这一种

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 
根据作者的评论更新

如果您需要第二个最近输入的多个列,可以尝试以下代码段

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

这将起作用,但如果我需要从subselect中选择多个列,该怎么办?我需要使用另一个子选择。就性能而言,这就是我尝试加入的原因。
prices
表中是否有
id
列?我不明白OPs查询中的错误是什么,您能详细说明一下吗?@PeerBr OP试图从JOIN语句中访问p1,该语句无法访问它要连接到的其他表。请注意:您不需要在
prices