我正在尝试查找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下的评论表以及评论和其所在领域的排名。
我收到此错误,似乎无法弄清楚如何正确添加别名。
每个派生表都必须有自己的别名
答案 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 join
或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