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

Por que no funciona este select distint

Estas en el tema de Por que no funciona este select distint en el foro de Mysql en Foros del Web. Hola amigos, Vereis estoy intentando obtener los resultados de una consulta pero que tengan distinto id_empresas la cosa es que no funciona y no se ...
  #1 (permalink)  
Antiguo 11/10/2013, 04:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años
Puntos: 4
Por que no funciona este select distint

Hola amigos,


Vereis estoy intentando obtener los resultados de una consulta pero que tengan distinto id_empresas la cosa es que no funciona y no se por que.

Esta es la consulta:

Código SQL:
Ver original
  1. SELECT DISTINCT (ed.id_empresas),
  2. ed.nombre,
  3. e.id,  
  4. e.id_empresas,
  5. e.activo,
  6. e.descuento,
  7. e.limitaciones,
  8. e.fecha_desde,
  9. e.fecha_hasta
  10.  
  11. FROM  empresas_direcciones ed  INNER JOIN empresas_descuentos e ON e.id_empresas = ed.id_empresas AND e.activo = 1


a ver si alguien ve algo raro

Un saludo!
  #2 (permalink)  
Antiguo 11/10/2013, 06:48
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: Por que no funciona este select distint

El DISTINCT debe, sin duda alguna, estar funcionando correctamente, pero posiblemente no sea lo que necesitas hacer para lograr lo que quieres.
Tienes que recordar siempre que en BBDD se considera "distinto" si y sólo dos registros cualesquiera tienen al menos un valor en una columna diferente, y se consideran iguales si todos y cada uno de los valores de los campos devueltos en la consulta contienen iguales valores entre dos registros comparados.
En tu caso estás pidiendo que te devuelva valores de ambas tablas, relacionasas relacionadas por INNER JOIN, lo que expresa una relación 1:N. En ese contxto, el nombre de la empresa obligatoriamentese repetirá tantas veces en la tabla, como descuentos distintos tenga relacionados.
Eso no sólo es correcto, es inevitable.

Ahora bien, la pregunta es: ¿Cómo sería el resultado que quieres obtener?
¿Puedes mostrarnos un ejemplo de lo que quieres lograr, y de los datos que existen en cada tabla, para obtenerlos?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/10/2013, 00:59
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años
Puntos: 4
Respuesta: Por que no funciona este select distint

Hola gnzsoloyo gracias por tu atencion.


El objetivo que deseo lograr es el siguiente:

Tengo una tabla empresas y otra descuentos, por un lado en la tabla empresas hay un id para cada empresas, la cosa es que pueden existir dos entradas con el mismo id ya que puede existir dos direcciones postales de una empresas.

Por otro lado esta la tabla descuentos en la que guardo los descuentos con el "id_empresas" de la tablar empresas. Entonces lo que pretendo es listar los descuentos que tiene cada empresa pero si en la tabla empresas hay dos entradas con el mismo id no me de dos resultados solo me muestre uno de ellos con el descuento.

Espero haberme explicado bien amigo.

Un saludo y de nuevo gracias!!
  #4 (permalink)  
Antiguo 14/10/2013, 01:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Por que no funciona este select distint

Imagino que tienes un campo id de empresa en la tabla empresas_direcciones, aunque no lo veo en tu select. Debes agrupar por él. Lo he puesto como ed.id tras el GROUP BY, porque entiendo que así debería llamarse. Cambia el nombre por el que tenas. Te mostrará los datos sólo del primer registro de empresas que tenga el mismo id.
Código MySQL:
Ver original
  1. ed.nombre,
  2. e.id,  
  3. e.id_empresas,
  4. e.activo,
  5. e.descuento,
  6. e.limitaciones,
  7. e.fecha_desde,
  8. e.fecha_hasta FROM  empresas_direcciones ed  INNER JOIN empresas_descuentos e ON e.id_empresas = ed.id_empresas AND e.activo = 1 GROUP BY ed.id
  #5 (permalink)  
Antiguo 14/10/2013, 01:32
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años
Puntos: 4
Respuesta: Por que no funciona este select distint

Hola jurena que tal!!

Veras acabo de probar la consulta que tengo añadiendo la parte que has escrito, pero la cosa es que sigue sacando mas de una empresas con mismo id.

La consulta quedo asi:




Código SQL:
Ver original
  1. SELECT DISTINCT (ed.id) AS id_empresas_descuentos, ed.id_empresas, e.id AS id_descuento, e.id_empresas, e.activo, e.descuento, e.limitaciones, e.fecha_desde, e.fecha_hasta FROM empresas_direcciones ed INNER JOIN empresas_descuentos e ON e.id_empresas = ed.id_empresas AND e.activo = 1 AND e.fecha_hasta >= "2013-10-14" GROUP BY ed.id

Saludos!!
  #6 (permalink)  
Antiguo 14/10/2013, 01:35
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años
Puntos: 4
Respuesta: Por que no funciona este select distint

Amigo, estaba equivocando los id's

La consulta quedó asi y parece que funciona:

Código SQL:
Ver original
  1. SELECT ed.id AS id_empresas_descuentos, ed.id_empresas, e.id AS id_descuento, e.id_empresas, e.activo, e.descuento, e.limitaciones, e.fecha_desde, e.fecha_hasta FROM empresas_direcciones ed INNER JOIN empresas_descuentos e ON e.id_empresas = ed.id_empresas AND e.activo = 1 AND e.fecha_hasta >= "2013-10-14" GROUP BY ed.id_empresas


Muchas gracias!!!!

Etiquetas: join, select
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 09:28.