Ver Mensaje Individual
  #8 (permalink)  
Antiguo 20/05/2013, 12:26
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 14 años, 5 meses
Puntos: 447
Respuesta: Como hacer un update con un select distinct

Hola rolapa65:

Veamos si entendí correctamente. En realidad hay muchas formas para hacer lo que quieres, con subconsultas, con NOT IN, con NOT EXISTS... pero veamos si esto es más o menos lo que necesitas... Supongamos que tenemos estas dos tablas:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+----------+
  3. | cliente1 | cliente2 |
  4. +----------+----------+
  5. | uno      | uno      |
  6. | dos      | two      |
  7. | tres     | dos      |
  8. | cuatro   | cuatro   |
  9. +----------+----------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM clientes;
  13. +----+---------------+
  14. | id | nombreCliente |
  15. +----+---------------+
  16. |  1 | uno           |
  17. +----+---------------+
  18. 1 row in set (0.00 sec)

Ahora bien, si entendí correctamente lo que deseas es ingresar TODOS LOS CLIENTES DISTINTOS DE TUS COLUMNAS CLIENTE1 Y CLIENTE2 a la tabla CLIENTES... Ahora bien, para obtener los clientes distintos, puedes hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT DISTINCT cliente1 FROM tabla
  2.     -> UNION
  3.     -> SELECT DISTINCT cliente2 FROM tabla;
  4. +----------+
  5. | cliente1 |
  6. +----------+
  7. | uno      |
  8. | dos      |
  9. | tres     |
  10. | cuatro   |
  11. | two      |
  12. +----------+
  13. 5 rows in set (0.00 sec)

Esta consulta te elimina los clientes duplicados entre las dos columnas, sin embargo, observa que el cliente "UNO" YA EXISTE EN LA TABLA CLIENTES, POR LO QUE NO DEBERÍA DE INSERTARSE... utilizando la cláusula NOT EXISTS, puedes filtrar estos registros, para traer sólo los clientes no duplicados que no existan en la tabla... de tal manera la consulta te quedaría así:

Código MySQL:
Ver original
  1. mysql> SELECT DISTINCT cliente1 nombreCliente
  2.     -> FROM tabla T
  3.     -> WHERE NOT EXISTS (SELECT nombreCliente
  4.     ->                   FROM clientes C
  5.     ->                   WHERE c.nombreCliente = T.cliente1)
  6.     -> UNION
  7.     -> SELECT DISTINCT cliente2 nombreCliente
  8.     -> FROM tabla T
  9.     -> WHERE NOT EXISTS (SELECT nombreCliente
  10.     ->                   FROM clientes C
  11.     ->                   WHERE c.nombreCliente = T.cliente2);
  12. +---------------+
  13. | nombreCliente |
  14. +---------------+
  15. | dos           |
  16. | tres          |
  17. | cuatro        |
  18. | two           |
  19. +---------------+
  20. 4 rows in set (0.00 sec)

De tal manera que el INSERT quedaría así:

Código MySQL:
Ver original
  1. mysql> INSERT INTO clientes
  2.     -> SELECT DISTINCT NULL, cliente1 nombreCliente
  3.     -> FROM tabla T
  4.     -> WHERE NOT EXISTS (SELECT nombreCliente
  5.     ->                   FROM clientes C
  6.     ->                   WHERE c.nombreCliente = T.cliente1)
  7.     -> UNION
  8.     -> SELECT DISTINCT NULL, cliente2 nombreCliente
  9.     -> FROM tabla T
  10.     -> WHERE NOT EXISTS (SELECT nombreCliente
  11.     ->                   FROM clientes C
  12.     ->                   WHERE c.nombreCliente = T.cliente2);
  13. Query OK, 4 rows affected (0.06 sec)
  14. Records: 4  Duplicates: 0  Warnings: 0
  15.  
  16. mysql> SELECT * FROM clientes;
  17. +----+---------------+
  18. | id | nombreCliente |
  19. +----+---------------+
  20. |  1 | uno           |
  21. |  2 | dos           |
  22. |  3 | tres          |
  23. |  4 | cuatro        |
  24. |  5 | two           |
  25. +----+---------------+
  26. 5 rows in set (0.00 sec)

Dale un vistazo y dinos si es lo que necesitas hacer.

Saludos
Leo.