MYSQL Union All with aliases

时间:2013-04-04 18:36:41

标签: mysql union alias

我正在尝试查找app表格中尚未在评论表中进行评论的所有应用程序。

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

在找到哪些应用程序没有审核之后,我希望获得app表中的所有值,以便列出仍需要审核的应用程序。 app_id对应于apps表中应用程序信息的键,当应用程序被审核时,app_id随后会进入app_id下的评论表以及评论和其所在领域的排名。

我收到此错误,似乎无法弄清楚如何正确添加别名。

  

每个派生表都必须有自己的别名

2 个答案:

答案 0 :(得分:4)

错误很明显,为该表添加别名:

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 BY SELECT *且不符合ANSI SQL。它在mysql中可以正常工作,但是尽量不在SELECT子句中放置不在GROUP BY中的列,也不在聚合函数中。 MySQL将为您的案例中的那些列获取任意值。

答案 1 :(得分: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