我可以在子查询中使用多个列吗?

Ian*_*ess 3 sql sql-subselect

我想显示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(*)还是只能有一列?

Mar*_*ith 5

不是在一个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)