2011-09-06 427 views
3

经与SQL(目前使用PostgreSQL)麻烦SQL子查询的问题,“错误:无效引用FROM子句项...”

我有这个疑问,我需要比较最近项和第二最近的项目:

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的数据ISN还没有?有没有另一种方法来做到这一点与JOIN?

+0

就在下面的代码片段方面说明:你不需要价格附近的引号 –

回答

2

根据作者的评论

如果需要从最近的第二个条目多列试试这个

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 

UPDATE,你可以尝试

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 
+0

这将工作,但如果我需要多个列f从子选择?我需要使用另一个子查询。性能方面,这就是为什么我试图做一个JOIN。 – scottkf

+0

“价格”表中是否有任何“ID”列? – hazzik

+0

是的,有一个“ID”列 – scottkf