2013-04-04 67 views
1

我試圖找到所有存在於應用程序表中還沒有在審查表評論中的應用。MYSQL聯盟所有有別名

SELECT * 
    FROM (
     SELECT app_id FROM apps 
     UNION ALL 
     SELECT app_id FROM reviews 
     ) 
    GROUP BY app_id 
    HAVING COUNT(*) = 1 

發現該應用程序後,沒有審查,我想有以列出仍需評論中的應用從應用程序表中的所有值。該APP_ID對應於在應用程序表中的應用程序信息,並在一個應用程序進行審查,對APP_ID然後在他們的尊重領域的意見和排名一起進入審查桌子底下APP_ID的關鍵。

我得到這個錯誤,似乎無法弄清楚如何正確添加別名。

每個派生的表必須有它自己的別名

回答

3

的錯誤是很清楚,一個別名添加到該表:

SELECT * 
FROM 
(
    SELECT app_id FROM apps 
    UNION ALL 
    SELECT app_id FROM reviews 
) AS t -- < -------------- this 
GROUP BY app_id 
HAVING COUNT(*) = 1; 

需要注意的是:GROUP BYSELECT *是不推薦,它不符合ANSI SQL。這將在MySQL正常工作,但儘量不要放列SELECT子句是不是在GROUP BY也不在一個聚合的功能分析。在你的情況下,MySQL將獲得這些列的任意值。

0

你的問題通常是使用left outer joinnot in回答:

select a.* 
from apps a left outer join 
    reviews r 
    on a.app_id = r.app_id 
where r.app_id is null