4

我正在尝试查找应用程序表中存在的所有应用程序,这些应用程序尚未在审查表中进行审查。

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

在找到哪些应用程序没有审核后,我想从应用表中获取所有值,以便列出仍需要审核的应用程序。app_id 对应于apps 表中应用信息的key,当一个应用被review 时,app_id 连同评论和在他们尊重的字段中的排名一起被输入到app_id 下的reviews 表中。

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

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

4

2 回答 2

5

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

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

于 2013-04-04T18:37:57.723 回答
0

您的问题通常使用left outer joinor来回答not in

select a.*
from apps a left outer join
     reviews r
     on a.app_id = r.app_id
where r.app_id is null
于 2013-04-04T18:56:28.353 回答