2013-01-22 33 views
0

好的,我有一個收視表。爲每個留下評分的用戶創建一個新行。我試圖做的是創建一個查詢,該查詢將返回現在和7天前存在的每個特定行的評級值。mysql加入虛擬表

廣義的觀點是,我想計算總平均評分與7天前總平均評分的差異。

我有這個,我認爲是正確的路走下來,但我得到

Unknown column 'start_ratings.menu_item_id' in 'on clause' 

SELECT * 
FROM ratings end_ratings 
JOIN (
SELECT menu_item_id as end_menu_item_id, AVG(value) AS end_rating 
    FROM ratings 
    WHERE 
     created_at > current_date - 7 
     AND menu_item_id IS NOT NULL 
     AND location_id IS NOT NULL 
    GROUP BY menu_item_id 
) start_ratings ON (end_ratings.menu_item_id = start_ratings.menu_item_id) 
WHERE menu_item_id IS NOT NULL 
AND location_id IS NOT NULL; 

回答

3

你別名列as end_menu_item_id。只需要使用替代,因爲只有別名派生表的()ON子句中,SELECT列表等享譽省內外......

正因爲如此:

SELECT menu_item_id as end_menu_item_id, 
/*-----------------^^^^^^^^^^^^^^^^^^^^^^ */ 

使用此:

...) start_ratings ON (end_ratings.menu_item_id = start_ratings.end_menu_item_id) 
/*----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^ */ 
+0

非常感謝,解決了這個問題,我明白了。 – hcker2000