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

Omitir valores repetidos sql

Estas en el tema de Omitir valores repetidos sql en el foro de Mysql en Foros del Web. HOla a todos!!! Tengo una duda de sql, agradecería enormemente me ayudaran.... Con esto me sale la consulta completa @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original ...
  #1 (permalink)  
Antiguo 08/12/2010, 12:52
 
Fecha de Ingreso: noviembre-2010
Mensajes: 25
Antigüedad: 13 años, 5 meses
Puntos: 0
Omitir valores repetidos sql

HOla a todos!!!
Tengo una duda de sql, agradecería enormemente me ayudaran....

Con esto me sale la consulta completa

Código MySQL:
Ver original
  1. SELECT n.nota_num, n.clie_clave,
  2. cl.nomb_clie,
  3. cl.status_clie,n.send,
  4. cl.tel_clie,cl.email,cl.pais_clave,
  5. cl.pobla_clave,cl.cve_ciu,cd.desc_ciu,
  6. e.edo_clave,e.edo,cl.cp_clie,
  7. cl.limite_cred
  8.     (nota n INNER JOIN
  9.         (ciudad cd INNER JOIN cliente cl
  10.         ON  cl.cve_ciu=cd.cve_ciu)
  11.      ON cl.clie_clave = n.clie_clave)
  12.   ON cl.pobla_clave=e.edo_clave

Pero el problema es que sale:

nota_num clie_clave nomb_clie .....
9678 09141 Empresa WM, S.A. DE C.V.
9779 09161 DISTRIBUIDORA WER S.A. DE C.V.
9789 09161 DISTRIBUIDORA WER S.A. DE C.V.
9777 09161 DISTRIBUIDORA WER S.A. DE C.V.
9878 09567 TIENDA ROMERO

pero yo sólo quiero que salga:

nota_num clie_clave nomb_clie .....
9678 09141 Empresa WM, S.A. DE C.V.
9779 09161 DISTRIBUIDORA WER S.A. DE C.V.
9878 09567 TIENDA ROMERO

Osea que clie_clave no se debe de repetir.

Saludos y gracias!!

Última edición por gnzsoloyo; 03/10/2014 a las 09:20
  #2 (permalink)  
Antiguo 08/12/2010, 12:59
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Omitir valores repetidos sql

intenta agrupando los resultados iguales con GROUP BY
  #3 (permalink)  
Antiguo 08/12/2010, 13:21
 
Fecha de Ingreso: noviembre-2010
Mensajes: 25
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Omitir valores repetidos sql

Cita:
Iniciado por tampon Ver Mensaje
intenta agrupando los resultados iguales con GROUP BY
Ya lo hice pero me sigue mostrando los valores repetidos....si lo hago de esta manera

Código MySQL:
Ver original
  1. SELECT n.nota_num, n.clie_clave,
  2. cl.nomb_clie,
  3. cl.status_clie,n.send,
  4. cl.tel_clie,cl.email,cl.pais_clave,
  5. cl.pobla_clave,cl.cve_ciu,cd.desc_ciu,
  6. e.edo_clave,e.edo,cl.cp_clie,
  7. cl.limite_cred
  8. (nota n INNER JOIN
  9. (ciudad cd INNER JOIN cliente cl
  10. ON cl.cve_ciu=cd.cve_ciu)
  11. ON cl.clie_clave = n.clie_clave)
  12. ON cl.pobla_clave=e.edo_clave
  13. GROUP BY n.clie_clave,
me marca el sig error

The column (nota_num) must be in the GROUP BY list

osea que tengo que agregar todos los compos del select...y de todas maneras no me da la solución que quiero...

Última edición por gnzsoloyo; 03/10/2014 a las 09:20
  #4 (permalink)  
Antiguo 08/12/2010, 16:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Omitir valores repetidos sql

Buenas tardes anayazti:

No mencionas cuál es la cardinalidad entre tus tablas. Si existe alguna relación 1 a muchos entre tus tablas edo, nota, ciudad y cliente entonces ahí está el problema, sería cuestión de que vayas revisando cada JOIN a la vez.

También deberías comentarnos cuáles de tus tablas son catálogos y cuales son "tablas de datos". Como recomendación pon siempre tu tabla de datos en la primera posición de tu FROM y ve uniendo los catálogos con los JOIN'S. Según entiendo tu tabla de datos es Clientes, inicia haciendo algo como esto:

Código MySQL:
Ver original
  1. SELECT * FROM clientes cl INNER JOIN
  2. notas n on cl.clie_clave = n.clie_clave

Si esto te arroja resultados correctos entonces puedes continuar con alguno de los catálogos


Código MySQL:
Ver original
  1. SELECT * FROM clientes cl
  2. INNER JOIN notas n ON cl.clie_clave = n.clie_clave
  3. INNER JOIN ciudad cd ON cl.cve_ciu = cd.cve_ciu

Y así hasta incluir todas tus tablas. Revisa que no te falte definir alguna relación, y si continuas con problemas lo comentas en el foro.

Saludos
Leo.
  #5 (permalink)  
Antiguo 08/12/2010, 17:06
 
Fecha de Ingreso: noviembre-2010
Mensajes: 25
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Omitir valores repetidos sql

Hola Leo.

Empezaré por hacer una pregunta màs simple.
como hago para que no salgan repetidos en la sig consulta.

Código MySQL:
Ver original
  1. FROM cliente cl INNER JOIN nota n
  2. ON cl.clie_clave = n.clie_clave.

Es decir que no salga esto:

clie_clave nomb_clie .....
09141 Empresa WM, S.A. DE C.V....
09161 DISTRIBUIDORA WER S.A. DE C.V.....
09161 DISTRIBUIDORA WER S.A. DE C.V.....
09161 DISTRIBUIDORA WER S.A. DE C.V.....
09567 TIENDA ROMERO .......

sino esto

clie_clave nomb_clie .....
09141 Empresa WM, S.A. DE C.V....
09161 DISTRIBUIDORA WER S.A. DE C.V.....
09567 TIENDA ROMERO .......

la cardinalidad de mis tablas es
nota * - 1 cliente

Y que esto no sea con distinct, porfavor.

Muchas gracias...

(Como haces para poner tu código, es un pluggin?')

Última edición por gnzsoloyo; 03/10/2014 a las 09:21
  #6 (permalink)  
Antiguo 09/12/2010, 07:37
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Omitir valores repetidos sql

Hola anayazti

La clausula group by tiene un funcionamiento particular en mysql. Alguna vez tuve una duda acerca de su funcionamiento que expuse en este tema.

En resumen... Aunque mysql aplicando el comando ONLY_FULL_GROUP_BY responde al comportamiento correcto del group by para cualquier DBMS, la razón por la que es necesario incluir todos los campos que se expongan en la consulta como parte del group by es por que se necesita un criterio para excluir los registros que aparentemente son iguales.

Te lo explico con un ejemplo entre mysql y postgresql.

tenemos una tabla llamada empleado con id,nombre y departamento al que pertenece.

En postgresql sería:

Código SQL:
Ver original
  1. pruebas=> CREATE TABLE empleado(id INTEGER,nombre TEXT,depto TEXT);
  2. CREATE TABLE
  3. pruebas=> INSERT INTO empleado VALUES(1,'DANIEL','SISTEMAS');
  4. INSERT 0 1
  5. pruebas=> INSERT INTO empleado VALUES(2,'MONICA','BIOLOGIA');
  6. INSERT 0 1
  7. pruebas=> INSERT INTO empleado VALUES(2,'MONICA','BIOLOGIA');
  8. INSERT 0 1
  9. pruebas=> SELECT *FROM empleado GROUP BY depto;
  10. ERROR:  COLUMN "empleado.id" must appear IN the GROUP BY clause OR be used IN an aggregate FUNCTION

Fijate que el error dice que es totalmente necesario incluir en la clausula group by el campo id.

Ahora miremos en mysql.

Código MySQL:
Ver original
  1. mysql> CREATE TABLE empleado(id INTEGER,nombre TEXT,depto TEXT);
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> INSERT INTO empleado VALUES(1,'DANIEL','SISTEMAS');
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> INSERT INTO empleado VALUES(2,'MONICA','BIOLOGIA');
  8. Query OK, 1 row affected (0.00 sec)
  9.  
  10. mysql> INSERT INTO empleado VALUES(3,'SANTIAGO','SISTEMAS');
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> SELECT *FROM empleado GROUP BY depto;
  14. +------+--------+----------+
  15. | id   | nombre | depto    |
  16. +------+--------+----------+
  17. |    2 | MONICA | BIOLOGIA |
  18. |    1 | DANIEL | SISTEMAS |
  19. +------+--------+----------+
  20. 2 rows in set (0.03 sec)

Supuestamente a agrupado correctamente la misma consulta.

La pregunta que se genera es: Con que criterio mysql ha mostrado el nombre DANIEL y no SANTIAGO? que criterio a tenido para rechazar este registro aunque cumpla todas las condiciones de la consulta?

Por el lado de postgresql (También Oracle, DB2 etc.) la inclusión de este campo es necesaria ya que si no cuenta con un criterio valido para la agrupación, al detectarlo genera error.

Leonardo_josue y tampon se preguntarán... esto que tiene que ver con el tema?
anayazti me ha solicitado ayuda mediante mensaje privado una explicación del como funciona el group by y la razón por la que no obtiene los resultados esperados.

El verdadero potencial del group by no es para exclusión de registros sino para el manejo de funciones de agrupación como MAX,MIN,SUM,AVG etc.

anayazti si nos compartes tus tablas clientes y nota (CREATE TABLE clientes....ETC) y algunos registros de prueba (INSERT INTO clientes VALUES....ETC) tal vez te podamos ayudar con la salida que quieras mostrar.

saludos a todos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 09/12/2010, 08:12
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: Omitir valores repetidos sql

¡Magnífica explicación del GROUP BY!
Yo en realidad no he explorado las razones de la diferencia de uso del mismo entre MySQL y el resto de los DBMS, porque en realidad lo que hago es aprovechar esa diferencia para poder realizar ciertas consultas.
Lo que sí me resulta interesante es esa configuración que permite que el GROUP BY opere igual que en el resto de los sistemas. Eso sí que es interesante.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 09/12/2010, 09:02
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Omitir valores repetidos sql


Me imagino que leiste el articulo que recomienda jurena en el tema que expuse.

http://dev.mysql.com/tech-resources/...-by-myths.html

Aca dan una explicación bastante profesional de la problematica del group by en mysql.

Muy bueno.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 13/12/2010, 18:02
 
Fecha de Ingreso: noviembre-2010
Mensajes: 25
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Omitir valores repetidos sql

Muchas gracias Leo y Huesos!!

Fueron de mucha ayuda!

Etiquetas: sql, bases-de-datos
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 09:03.