Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/02/2014, 11:25
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Ordenar la unión total de dos tablas y diferentes campos

Hola srpiramo:

Si entendí correctamente lo que quieres hacer es ordenar por el campo uno_id, siempre y cuando el valor sea distinto de nulo, pero en caso de que sea nulo, entonces ordenar por el campo dos_id... Esto quiere decir que primero debes determinar si el campo uno_id es nulo o no y hacer una ordenación condicional.

La consulta podría quedar así:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->    tabla1.uno_id,
  3.     ->    tabla1.uno_nombre,
  4.     ->    tabla2.dos_id,
  5.     ->    tabla2.dos_nombre,
  6.     ->    tabla2.dos_empresa,
  7.     ->    tabla2.dos_cargo
  8.     -> FROM tabla1
  9.     ->    LEFT JOIN tabla2 ON tabla1.uno_id = tabla2.dos_id
  10.     -> UNION
  11.     -> SELECT
  12.     ->    tabla1.uno_id,
  13.     ->    tabla1.uno_nombre,
  14.     ->    tabla2.dos_id,
  15.     ->    tabla2.dos_nombre,
  16.     ->    tabla2.dos_empresa,
  17.     ->    tabla2.dos_cargo
  18.     -> FROM tabla1
  19.     ->    RIGHT JOIN tabla2
  20.     ->    ON tabla1.uno_id = tabla2.dos_id
  21.     -> ORDER BY IF (uno_id IS NOT NULL, uno_id, dos_id);
  22. +--------+------------+--------+------------+-------------+-----------+
  23. | uno_id | uno_nombre | dos_id | dos_nombre | dos_empresa | dos_cargo |
  24. +--------+------------+--------+------------+-------------+-----------+
  25. |      1 | Marcial    |      1 | Marcial    | Mercado     | Gerente   |
  26. |   NULL | NULL       |      2 | Carlos     | Zapateria   | Peon      |
  27. |      3 | Alfredo    |   NULL | NULL       | NULL        | NULL      |
  28. +--------+------------+--------+------------+-------------+-----------+
  29. 3 rows in set (0.00 sec)

Observa que al poner un IF en el ORDER BY se realiza una pregunta antes de ordenar... Quizás quede más claro si observas cómo trabaja el IF cuando se pone en el SELECT:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->    tabla1.uno_id,
  3.     ->    tabla2.dos_id,
  4.     ->    IF(tabla1.uno_id IS NOT NULL, tabla1.uno_id, tabla2.dos_id) orden
  5.     -> FROM tabla1
  6.     ->    LEFT JOIN tabla2 ON tabla1.uno_id = tabla2.dos_id
  7.     -> UNION
  8.     -> SELECT
  9.     ->    tabla1.uno_id,
  10.     ->    tabla2.dos_id,
  11.     ->    IF(tabla1.uno_id IS NOT NULL, tabla1.uno_id, tabla2.dos_id) orden
  12.     -> FROM tabla1
  13.     ->    RIGHT JOIN tabla2
  14.     ->    ON tabla1.uno_id = tabla2.dos_id
  15.     -> ORDER BY orden;
  16. +--------+--------+-------+
  17. | uno_id | dos_id | orden |
  18. +--------+--------+-------+
  19. |      1 |      1 |     1 |
  20. |   NULL |      2 |     2 |
  21. |      3 |   NULL |     3 |
  22. +--------+--------+-------+
  23. 3 rows in set (0.00 sec)

Observa que el campo calculado ORDEN va tomando el id correspondiente de acuerdo a la condición que colocas en el IF... Dale un vistazo para ver si esto es lo que necesitas.

Saludos
Leo