tengo 3 mesas
equipos
id name 6 WD 7 LGO 10 PS 11 EM 12 SO 13 DM 14 DMS 15 CRO 16 T / Tmapeo_equipo
id team_id parent_team_id 1 6 0 2 7 0 3 10 7 4 11 7 5 12 0 6 13 12 7 14 12 8 15 0 9 16 15empleados
id name team_id 3 Bk 6 4 Nr 6 5 SV 7 6 GK 10 7 JPD 13 8 BSY 16 9 MK 16 10 Ps 16 11 Bji 16mi consulta es
SELECT t.* FROM teams t INNER JOIN employees e ON t.id = e.team_id INNER JOIN team_mapping tm ON t.id = tm.team_id WHERE tm.parent_team_id = '0' GROUP BY t.idse muestra como
id name 6 WD 7 LGOpero quiero mostrar el nombre del equipo principal solo si al menos tengo un empleado en el equipo principal o en el equipo secundario. es decir, salida como
team_id name 6 WD 7 LGO 12 SO 15 CROPor favor, ayúdame a escribir una consulta y la salida debería mostrarse como el resultado anterior
Gracias
así es como debería verse su consulta
SELECT DISTINCT CAST(t.id AS INT) id,t.name FROM teams t LEFT JOIN employees e ON t.id = e.team_id LEFT JOIN team_mapping tm ON t.id = tm.team_id WHERE tm.parent_team_id = '0'Puede usar LEFT JOIN para su consulta.
Luego eliminé la cláusula GROUP BY y la reemplacé con DISTICNT.
Solo uso la identificación CAST (t.id AS INT) para que el resultado se organice, de cualquier manera, puede eliminar la parte fundida, la única diferencia es la disposición del resultado.
select distinct id, name from teams t inner join (SELECT case when tm.parent_team_id = 0 then tm.team_id else tm.parent_team_id end as TID FROM teams t INNER JOIN team_mapping tm ON t.id = tm.team_id INNER JOIN employees e ON tm.team_id = e.team_id ) as table2 on t.id = table2.TIDEste código está en SQL Server
Aquí la consulta secundaria devuelve valores duplicados, y no podemos usar distintos con la declaración del caso. Para evitar valores duplicados y obtener el nombre del equipo principal, se necesita la unión interna con la subconsulta