Es una opción muy factible jurena. Pero no crees que requiera de demasiados procesos para llegar a un mismo resultado? La que pongo en el post, realiza la misma tarea.
haciendo un explain de las consultas, creo que puede ser mas optima la priimera opción. O que opinas?
Código sql:
Ver originalmysql> EXPLAIN SELECT t1.doc,t1.nombre,t1.jefe FROM empleados t1 INNER JOIN (SELECT Jefe FROM empleados GROUP BY Jefe HAVING COUNT(*) > 0) t2 ON t1.doc=t2.jefe;
+----+-------------+------------+--------+---------------+---------+---------+---------+------+-------------+
| id | select_type | TABLE | TYPE | possible_keys | KEY | key_len | REF | ROWS | Extra |
+----+-------------+------------+--------+---------------+---------+---------+---------+------+-------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 3 | |
| 1 | PRIMARY | t1 | eq_ref | PRIMARY | PRIMARY | 4 | t2.Jefe | 1 | |
| 2 | DERIVED | empleados | INDEX | NULL | jefe | 5 | NULL | 5 | USING INDEX |
+----+-------------+------------+--------+---------------+---------+---------+---------+------+-------------+
3 ROWS IN SET (0.00 sec)
mysql> EXPLAIN SELECT doc, Nombre, Jefe FROM empleados WHERE
Doc IN(SELECT DISTINCT Jefe FROM empleados WHERE jefe IS NOT NULL)
UNION SELECT doc, Nombre, Jefe FROM empleados WHERE jefe IS NULL ORDER BY Jefe;
+----+--------------------+------------+----------------+---------------+------+---------+-------+------+--------------------------+
| id | select_type | TABLE | TYPE | possible_keys | KEY | key_len | REF | ROWS | Extra |
+----+--------------------+------------+----------------+---------------+------+---------+-------+------+--------------------------+
| 1 | PRIMARY | empleados | ALL | NULL | NULL | NULL | NULL | 5 | USING WHERE |
| 2 | DEPENDENT SUBQUERY | empleados | index_subquery | jefe | jefe | 5 | func | 2 | USING INDEX; USING WHERE |
| 3 | UNION | empleados | REF | jefe | jefe | 5 | const | 1 | USING WHERE |
| NULL | UNION RESULT | <union1,3> | ALL | NULL | NULL | NULL | NULL | NULL | USING filesort |
+----+--------------------+------------+----------------+---------------+------+---------+-------+------+--------------------------+
4 ROWS IN SET (0.00 sec)
mysql>
lastimosamente no cuento con una tabla grande de este tipo para hacer las respectivas pruebas de rendimiento