我想显示EMPLOYEES表中所有员工的姓名,他们正在从表中处理三个以上的项目PROJECT.
PROJECTS.PersonID是一个外键引用EMPLOYEES.ID:
SELECT NAME, ID
FROM EMPLOYEES
WHERE ID IN
(
SELECT PersonID, COUNT(*)
FROM PROJECTS
GROUP BY PersonID
HAVING COUNT(*) > 3
)
Run Code Online (Sandbox Code Playgroud)
我可以在子查询中同时拥有两者PersonID,COUNT(*)还是只能有一列?
不是在一个IN子句中(或者至少不是你尝试使用它的方式.一些RDBMS允许在IN子句中有多个列的元组,但这对你的情况没有帮助)
您只需COUNT(*)要从SELECT列表中删除即可获得所需的结果.
SELECT NAME, ID
FROM EMPLOYEES
WHERE ID IN
(
SELECT PersonID
FROM PROJECTS
GROUP BY PersonID
HAVING COUNT(*) > 3
)
Run Code Online (Sandbox Code Playgroud)
如果您还想返回计数,则可以连接到具有多个列的派生表或公用表表达式.
SELECT E.NAME,
E.ID,
P.Cnt
FROM EMPLOYEES E
JOIN (SELECT PersonID,
Count(*) AS Cnt
FROM PROJECTS
GROUP BY PersonID
HAVING Count(*) > 3) P
ON E.ID = P.PersonID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4645 次 |
| 最近记录: |