Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como hacer un update con un select distinct

Estas en el tema de Como hacer un update con un select distinct en el foro de Mysql en Foros del Web. Hola: Tengo una consulta: SELECT distinct nombrecliente FROM clientes; con la cual se eliminan nombres de clientes repetidos. Pero ahora necesito actualizar la tabla clientes ...
  #1 (permalink)  
Antiguo 20/05/2013, 04:58
 
Fecha de Ingreso: mayo-2013
Mensajes: 16
Antigüedad: 10 años, 11 meses
Puntos: 0
Como hacer un update con un select distinct

Hola:

Tengo una consulta:
SELECT distinct nombrecliente FROM clientes;

con la cual se eliminan nombres de clientes repetidos.

Pero ahora necesito actualizar la tabla clientes con el resultado de dicho select.

¿Cómo podría hacerlo?.

Muchisimas gracias
  #2 (permalink)  
Antiguo 20/05/2013, 07:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como hacer un update con un select distinct

Debes entender la lógica antes de empezar a realizar operaciones que podrían entrañar pérdida de datos.

Imaginamos que en nombrecliente incluyes nombres y apellidos, claro.
Si no son muchas, lo mejor sería localizar las repeticiones mediante una consulta que te las traiga
Código MySQL:
Ver original
  1. SELECT nombrecliente, COUNT(*)total FROM clientes GROUP BY nombrecliente HAVING total > 1

Así sabrías si hay muchos repetidos y cuáles son antes de seguir con las operaciones.
Este es un primer paso. Dinos el resultado antes de seguir.
  #3 (permalink)  
Antiguo 20/05/2013, 08:44
 
Fecha de Ingreso: mayo-2013
Mensajes: 16
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Como hacer un update con un select distinct

Hola Jurena:

El total de registros son 360 y sin repetidos se quedan en 20.

¿Que podria hacer a partir de aqui, para actualizarla solo con esos 20?

Un saludo y muchisimas gracias por tu ayuda
  #4 (permalink)  
Antiguo 20/05/2013, 09:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como hacer un update con un select distinct

por lo pronto, no queda muy claro si estás efectivamente seguro de que el nombre esté repetido, o que la repetición del nombre de un cliente, implique que se trata del mismo cliente.
Ese campo ¿es el nombre como persona, como razón social o es el username?
¿;Cuál es la estructura real de esa tabla, y cuál es su clave primaria?

Pregunto porque si ese campo no es clave, o no puede ser usado como tal, sino que es un nombre repetible, lo que estás planteando puede dar como resultado errores de consistencia.
Por otro lado, siendo una tabla clientes, borrar un registro (que es lo que debería hacerse según dices), puede generar serios problemas de integridad referencial.

¿Estás completamente seguro de lo que estás planteando hacer?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 20/05/2013, 09:14
 
Fecha de Ingreso: mayo-2013
Mensajes: 16
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Como hacer un update con un select distinct

Hola gnzsoloyo:

parto de una tabla donde hay dos campos de clientes cliente1 y cliente2.

El nombre si esta repetido y no es clave.

Lo que quiero es generar a partir de dicha consulta una nueva tabla, que es la que usare, llamemosla clientes definitivos , ya que no tendra nombres repetidos y que sera la que definitivamente usare.

Es que en ambas columnas hay nombres repetidos, ya que lo importe desde un csv que ya los tenia asi.

Muchisimas gracias
  #6 (permalink)  
Antiguo 20/05/2013, 09:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como hacer un update con un select distinct

Indícanos la estructura de la tabla y los valores que se incluyen en los registros, haciendo especial hincapié en esos que se repiten, en qué campos pueden aparecer las repeticiones, o si las repeticiones además pueden darse entre registros.
Imaginamos que no tendrás relacionada esa tabla primera con otras tablas, porque entonces el proceso deberá ser llevado con más cuidado.
  #7 (permalink)  
Antiguo 20/05/2013, 11:47
 
Fecha de Ingreso: mayo-2013
Mensajes: 16
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Como hacer un update con un select distinct

Hola:

Contesto por partes:
Indícanos la estructura de la tabla y los valores que se incluyen en los registros:

En una tabla tengo dos campos varchar cliente1 y cliente2, donde aparecen los nombres de los clientes, algunos repetidos , pero ninguno de estos dos campos es clave principal ni esta relacionado con otras tablas.Digamos que esta tabla no la voy a utilizar nada mas que como tabla auxiliar, pues de esta solo quiero consultar ambos campos, cliente 1 y cliente 2 y pasar los nombres tanto de cliente1 como de cliente 2 a una nueva tabla llamada nombre clientes, la cual tiene un campo con una clave principal autonumerica y otro campo llamado nombrecliente donde deben aparecer los nombres de clientes pero sin repeticiones.

Para intentar aclararlo, solo quiero saber de los campos cliente 1 y cliente 2, cuantos nombres de clientes reales me quedarian, es decir, sin repeticiones de nombres, y eso nombres son los que deberia insertar en la tabla nombreclientes.

Espero haberlo aclarado un poco mas.

Muchisimas gracias por cuestra ayuda
  #8 (permalink)  
Antiguo 20/05/2013, 12:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.
  #9 (permalink)  
Antiguo 20/05/2013, 12:33
 
Fecha de Ingreso: mayo-2013
Mensajes: 16
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Como hacer un update con un select distinct

Hola Leonardo:

No podré probarlo hasta mañana, pero por tu explicación, me da que es exactamente lo que quiero hacer.

Un saludo, muchas gracias y ya os comento.
  #10 (permalink)  
Antiguo 20/05/2013, 12:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como hacer un update con un select distinct



Leonardo ya respondió, y bien claro, como siempre...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 20/05/2013, 13:55
 
Fecha de Ingreso: mayo-2013
Mensajes: 16
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Como hacer un update con un select distinct

Hola gnzsoloyo:

Quería pedir disculpas si os he molestado.Como comente, estoy empezando con esto y me cuesta.Quizas mi problema sea el querer empezar por el tejado sin haber hecho primero el suelo(aprender poco a poco).

Os agradezco vuestra ayuda y os pido disculpas una vez mas.


Un saludo
  #12 (permalink)  
Antiguo 20/05/2013, 14:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como hacer un update con un select distinct

rolapa65,
no has molestado a nadie y no tienes por qué pedir disculpas, al contrario. gnzsoloyo (si no lo malinterpreto) mostraba su alegría por una consulta que entiende responde a las mil maravillas a tu caso. Su post iba dirigido principalmente a Leonardo. Es lo que tiene esta comunicación escrita, a veces nos confunde.
saludos
  #13 (permalink)  
Antiguo 20/05/2013, 14:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como hacer un update con un select distinct


Es que me olvidé de poner el "Editado"



__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 20/05/2013, 14:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Como hacer un update con un select distinct

jajajaja No te preocupes rolapa65, como ya mencionaron, no has ofendido a nadie... Si gnzsoloyo hace referencia a que ya había contestado, es porque en muchas ocasiones estamos contestando los mismos post's y generalmente con la misma respuesta jejejejejeje a veces la única diferencia es quien da clic primero en el botón de Enviar Respuesta

Todo tranquilo y a seguir aprendiendo, que para eso están los foros.

Saludos
Leo.
  #15 (permalink)  
Antiguo 20/05/2013, 15:47
 
Fecha de Ingreso: mayo-2013
Mensajes: 16
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Como hacer un update con un select distinct

Hola:

ok entonces.

Lo he probado y funciona tal y como quería,muchas gracias Leonardo, solo que me faltaría ordenar en la tabla clientes, los registros por nombre cliente después de hacer el insert y una vez eliminados nombres repetidos.

¿Me podéis indicar como?

Muchas gracias de nuevo a todos
  #16 (permalink)  
Antiguo 21/05/2013, 10:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como hacer un update con un select distinct

Una consulta como esta debería bastar:
Código MySQL:
Ver original
  1. SELECT nombrecliente FROM clientes ORDER BY nombrecliente

Pero, claro, no nos dices si quieres ordenar por apellidos y si tienes los datos escritos en el campo nombre y apellidos. Acláranos esto antes de seguir.
Ponnos ejemplos de los datos para orientarnos mejor.
  #17 (permalink)  
Antiguo 22/05/2013, 05:16
 
Fecha de Ingreso: mayo-2013
Mensajes: 16
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Como hacer un update con un select distinct

Hola Jurena:

Muchas gracias, funciona perfectamente para lo que quería hacer.

Un saludo

Etiquetas: distinct, select, tabla, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:54.