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

Problema en consulta con Distinct

Estas en el tema de Problema en consulta con Distinct en el foro de Bases de Datos General en Foros del Web. Un saludo, compañeros. Mi problema es el siguiente... tengo una tabla "Autos". Dicha tabla cuenta con los siguientes campos: (matrícula_auto, marca_auto, modelo_auto, peso_auto, etc) Mi ...
  #1 (permalink)  
Antiguo 22/07/2015, 11:22
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 7 años, 3 meses
Puntos: 0
Problema en consulta con Distinct

Un saludo, compañeros. Mi problema es el siguiente... tengo una tabla "Autos". Dicha tabla cuenta con los siguientes campos: (matrícula_auto, marca_auto, modelo_auto, peso_auto, etc) Mi deseo es el de hacer una consulta que me devuelva todos los campos de cada registro, pero que solo aparezca un registro en el que la marca y el modelo del auto sean el mismo. Es decir... Si yo tengo dos autos cuya 'marca_auto' sea igual a 'Opel' y cuyo 'modelo_auto' sea igual a 'Corsa', solo me devuelva uno de ellos. Si uso la siguiente sentencia:

Código SQL:
Ver original
  1. SELECT DISTINCT marca_auto, modelo_auto FROM autos

Logra el objetivo de que no me salgan dos registros cuya marca y modelo sean iguales. Sin embargo... no sé como hacer que los registros que salen, me salgan con el resto de campos: peso_auto, etc. Pensé que sería una subconsulta... imaginé algo como esto:

Código SQL:
Ver original
  1. SELECT peso_auto, etc, (SELECT DISTINCT marca_auto, modelo_auto FROM autos) FROM autos;

Pero como veis y como me deja claro el resultado... algo estoy haciendo mal. A ver si alguno puede decirme la sentencia que resuelve mi problema.

Última edición por gnzsoloyo; 22/07/2015 a las 11:31
  #2 (permalink)  
Antiguo 22/07/2015, 12:38
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 14 años, 4 meses
Puntos: 180
Respuesta: Problema en consulta con Distinct

Pues yo lo veo como un manejo de CONJUNTOS, el "A", donde están todos los datos y el "B", que es donde esta tu DISTICT, entonces, solo te faltaría unirlos, ¿no?

Algo tal vez como esto:

Código SQL:
Ver original
  1. SELECT * FROM AUTOS A INNER JOIN (SELECT DISTINCT marca_auto, modelo_auto FROM autos) B
  2. ON A.marca_auto = B.marca_auto
  3. AND A.modelo_auto = B.modelo_auto
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 22/07/2015, 13:17
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 7 años, 3 meses
Puntos: 0
Respuesta: Problema en consulta con Distinct

Tal y como lo has puesto, copiando y pegando... me da un error que supongo es de sintaxis. Me dice que no existe la tabla autos.autos. No conozco la razón. Si alguien da con otra solución se lo agradezco.
  #4 (permalink)  
Antiguo 22/07/2015, 13:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 15 años, 3 meses
Puntos: 774
Respuesta: Problema en consulta con Distinct

cual fue el query que ejecutaste, porque en el que esta en el foro no veo ningun autos.autos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 22/07/2015, 13:25
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 7 años, 3 meses
Puntos: 0
Respuesta: Problema en consulta con Distinct

Justa, exacta y precisamente el que está en el foro. Justa, exacta y precisamente este mismo que copio y pego tras copiar y pegar en la ventana sql de phpMyAdmin

Código SQL:
Ver original
  1. SELECT * FROM AUTOS A INNER JOIN (SELECT DISTINCT marca_auto, modelo_auto FROM autos) B
  2. ON A.marca_auto = B.marca_auto
  3. AND A.modelo_auto = B.modelo_auto

Alguna vez me ocurrió que una sentencia no se me ejecutaba correctamente por diferencias sql - mysql... porque phpMyAdmin usa mysql. No sé si podrá tratarse de eso.

Última edición por gnzsoloyo; 22/07/2015 a las 14:22
  #6 (permalink)  
Antiguo 22/07/2015, 13:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 15 años, 3 meses
Puntos: 774
Respuesta: Problema en consulta con Distinct

trata con:

Código SQL:
Ver original
  1. SELECT a.marca_auto,a.modelo_auto,b.marca_auto, b.modelo_auto FROM AUTOS A INNER JOIN (SELECT DISTINCT marca_auto, modelo_auto FROM autos) B
  2. ON A.marca_auto = B.marca_auto
  3. AND A.modelo_auto = B.modelo_auto
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 22/07/2015, 13:53
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 7 años, 3 meses
Puntos: 0
Respuesta: Problema en consulta con Distinct

Código SQL:
Ver original
  1. SELECT a.marca_auto, a.modelo_auto, b.marca_auto, b.modelo_auto
  2. FROM AUTOS A
  3. INNER JOIN (SELECT DISTINCT marca_auto, modelo_auto
  4. FROM autos)B ON A.marca_auto = B.marca_auto
  5. AND A.modelo_auto = B.modelo_auto
  6. LIMIT 0 , 30

Me sigue resultando el mismo error.

Table 'autos.autos' doesn't exist

Por alguna razón phpMyAdmin no está entendiendo lo que quiero.

Mira, voy a descargarme otro manejador de base de datos, cosa que ya me recomendaron... pruebo en él y edito mi mensaje.

Última edición por gnzsoloyo; 22/07/2015 a las 14:22
  #8 (permalink)  
Antiguo 22/07/2015, 13:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 15 años, 3 meses
Puntos: 774
Respuesta: Problema en consulta con Distinct

y porque no ejecutas tu consulta directamente desde la consola de mysql???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 22/07/2015, 14:13
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 7 años, 3 meses
Puntos: 0
Respuesta: Problema en consulta con Distinct

Usé Heidi. La consulta no me retorna ningún error, sin embargo no es correcta pues tampoco me retorna lo que yo deseaba. Mi intención es que la consulta me retorne todos los registros con todos sus campos. Pero que, si existen dos registros cuyos campos marca_auto y modelo_auto coincidan... solo me devuelva uno de esos dos registros. La consulta que me das, me devuelve absolutamente todos los registros.
  #10 (permalink)  
Antiguo 22/07/2015, 14:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 15 años, 3 meses
Puntos: 774
Respuesta: Problema en consulta con Distinct

pon un pequeño ejemplo de tus datos y lo que quieres para poder ayudarte mejor :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 22/07/2015, 14:29
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 7 años, 3 meses
Puntos: 0
Respuesta: Problema en consulta con Distinct

Create table autos (matricula_auto varchar(15) NOT NULL,
marca_auto VARCHAR( 20 ) NOT NULL
modelo_auto varchar(20) NOT NULL,
peso_auto INT( 6 ) NOT NULL
PRIMARY KEY (matricula_auto))
engine=innodb


INSERT INTO AUTOS (matricula_auto, marca_auto, modelo_auto, peso_auto) values ('007845GH', 'Toyota', 'Nissan',1500);

INSERT INTO AUTOS (matricula_auto, marca_auto, modelo_auto, peso_auto) values ('117845GH', 'Toyota', 'Nissan',1500);

INSERT INTO AUTOS (matricula_auto, marca_auto, modelo_auto, peso_auto) values ('585742FF', 'Opel', 'Corsa',700);

Quiero hacer una consulta, que me devuelva todo de todos los registros, pero que cuando se encuentre con que hay dos registros (autos) que tienen la misma marca y modelo, me retorne solo uno de los dos registros.
  #12 (permalink)  
Antiguo 22/07/2015, 14:33
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 15 años, 3 meses
Puntos: 774
Respuesta: Problema en consulta con Distinct

y cual de los 2?? el que sea??? o cual es la logica para saber cual regresar??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 22/07/2015, 14:35
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 7 años, 3 meses
Puntos: 0
Respuesta: Problema en consulta con Distinct

El que sea, da igual. Siendo la misma marca y modelo, el resto de datos (salvo la matricula) seran los mismos. Son esos datos los que realmente me interesan. Por cierto, además de uno de esos dos registros... el resto, aquellos que no cumplen con que haya otro auto con la misma marca y modelo... deberían salirme todos. En este caso... solo existe uno.

Digo lo del resto de datos... porque mi tabla autos tiene más campos, pero no creo que los mismos afecten a la consulta, por eso no los puse.
  #14 (permalink)  
Antiguo 22/07/2015, 14:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 15 años, 3 meses
Puntos: 774
Respuesta: Problema en consulta con Distinct

con los datos que pones se puede hacer esto:


Código SQL:
Ver original
  1. SELECT t1.* FROM autos AS t1
  2. LEFT JOIN(
  3. SELECT MAX(matricula_auto) AS mat,marca_auto,modelo_auto FROM autos GROUP BY marca_auto, modelo_auto) AS t2 ON (t1.matricula_auto=t2.mat)
  4. WHERE t2.mat IS NOT NULL

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 22/07/2015, 15:20
 
Fecha de Ingreso: agosto-2014
Mensajes: 30
Antigüedad: 7 años, 3 meses
Puntos: 0
Respuesta: Problema en consulta con Distinct

Muchísimas gracias, compañero. Eres un crack.

Etiquetas: campo, distinct, mysql, select, tabla
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 22:24.