2011-09-06 41 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