Es simple-
SELECT empname,
empid,
(SELECT COUNT (profileid)
FROM profile
WHERE profile.empid = employee.empid)
AS number_of_profiles
FROM employee;
Es aún más simple cuando usa una combinación de tabla como esta:
SELECT e.empname, e.empid, COUNT (p.profileid) AS number_of_profiles
FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname, e.empid;
Explicación de la subconsulta:
Esencialmente, una subconsulta en un select
obtiene un valor escalar y lo pasa a la consulta principal. Una subconsulta en select
No se permite pasar más de una fila y más de una columna, lo cual es una restricción. Aquí, estamos pasando un count
a la consulta principal, que, como sabemos, siempre sería solo un número, un valor escalar. Si no se encuentra un valor, la subconsulta devuelve null
a la consulta principal. Además, una subconsulta puede acceder a columnas desde from
cláusula de la consulta principal, como se muestra en mi consulta donde employee.empid
se pasa de la consulta externa a la consulta interna.
Editar :
Cuando usa una subconsulta en un select
Oracle esencialmente lo trata como una combinación izquierda (puede ver esto en el plan de explicación de su consulta), con la cardinalidad de las filas siendo solo una a la derecha para cada fila a la izquierda.
Explicación de la combinación izquierda
Una combinación izquierda es muy útil, especialmente cuando desea reemplazar select
subconsulta debido a sus restricciones. Aquí no hay restricciones sobre el número de filas de las tablas a ambos lados de LEFT JOIN
palabra clave.
Para obtener más información, lea Oracle Docs sobre subconsultas y combinación izquierda o combinación externa izquierda.