更新
HAVING 子句中的谓词可以对聚合表达式进行操作。我想你可能正在寻找这样的东西:
SELECT t.eid
, COUNT(t.eid) AS cnt
FROM Edited_by t
GROUP BY t.eid
HAVING COUNT(t.eid) > 2
哎呀。我完全错过了这两个查询引用了两个不同的表。
要同时引用Editor 表,您可以将上面的查询用作内联视图。
SELECT c.eid AS edited_by_eid
, c.cnt AS cnt
, IF(c.cnt>2,e.Eid,NULL) AS editor_eid
FROM Editor e
JOIN ( SELECT t.eid
, COUNT(t.eid) AS cnt
FROM Edited_by t
GROUP BY t.eid
) c
ON c.eid = e.Eid
跟进
问:“我想通过运行一个来获得两个查询的结果。”
答:我不完全理解您想要实现的目标。
要返回两个单独的结果集,您需要运行两个单独的语句。 MySQL 可以从一个存储过程返回多个结果集,例如,一个过程可以执行两个查询。客户端可以处理这两个结果集(如果客户端接口库支持并启用)。这将是一个“单一语句”(CALL my_procedure;)。
如果您想连接两个单独查询的结果,您可以使用 UNION ALL 集合运算符。通常,我会返回一个鉴别器列来区分哪个查询返回了哪些行。为此,列数和每列的数据类型必须在两个查询之间匹配。
在您给出的示例中,来自编辑器表的查询需要返回一个虚拟整数类型列才能连接两个结果。
SELECT t.eid
, COUNT(Edited_by.eid) AS cnt
FROM Edited_by t
GROUP BY t.eid
UNION ALL
SELECT e.eid
, 0 AS cnt
FROM Editor e
WHERE ( SELECT COUNT(*)
FROM Edited_by c
WHERE c.eid=e.eid
) > 2