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

Me devuelve un registro que no existe ¿WTF?

Estas en el tema de Me devuelve un registro que no existe ¿WTF? en el foro de Mysql en Foros del Web. Hola amigos veran el tema es pequeño pero no lo entiendo, tengo esta consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT T1 . PrimerDato , ...
  #1 (permalink)  
Antiguo 02/05/2013, 12:22
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Me devuelve un registro que no existe ¿WTF?

Hola amigos veran el tema es pequeño pero no lo entiendo, tengo esta consulta:

Código SQL:
Ver original
  1. SELECT T1.PrimerDato , T1.SegundoDato , COUNT( T2.TercerDato ) TercerDato FROM T1 LEFT JOIN T2 ON T1.Idt2 = T2.Idt1 WHERE T1.Idt2 = '12';

Esa consulta ciempre devuelve un registro. No importa los datos de la tabla, si esta vacia devuelve 1, si esta con 20 devuelve 1, si el 12 existe lo devuelve bien, y si no existe devuelve un registro vacio.

Yo quiero que si no existe que no me devuelva un registro nulo, que no devuelva nada quiero ¿me explico? jaja

Algun alma caritativa que sepa de bd mysql que me proponga una solucion y me explique porque pasa esto? o que me de algun link o nombre del problema para intentar arreglarlo... gracias...
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 02/05/2013, 12:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Me devuelve un registro que no existe ¿WTF?

Código MySQL:
Ver original
  1.     T1.PrimerDato ,
  2.     T1.SegundoDato ,
  3.     COUNT( T2.TercerDato ) TercerDato
  4. FROM    T1
  5.     LEFT JOIN T2 ON T1.Idt2 = T2.Idt1
  6. WHERE T1.Idt2 = 12;

El error lo cometes al usar LEFT JOIN, cuando deberías usar INNER JOIN, si lo que pretendes es que sólo devuelva registros si se cumple que T1.Idt2 = T2.Idt1.
LEFT JOIN devuelve todo lo que está en la primera tabla del FROM tenga o no coincidencias con lo que haya en la segunda. Si la primera tabla contiene datos, siempre devolverá registros, en especial si en el WHERE validas un ID de esa tabla que sí exista.
¿Se entiende?

Lo que debes hacer es eliminar esa opción en una de dos formas:
Código MySQL:
Ver original
  1.     T1.PrimerDato ,
  2.     T1.SegundoDato ,
  3.     COUNT( T2.TercerDato ) TercerDato
  4. FROM    T1
  5.     INNER JOIN T2 ON T1.Idt2 = T2.Idt1
  6. WHERE T1.Idt2 = 12;

O bien:
Código MySQL:
Ver original
  1.     T1.PrimerDato ,
  2.     T1.SegundoDato ,
  3.     COUNT( T2.TercerDato ) TercerDato
  4. FROM    T1
  5.     LEFT JOIN T2 ON T1.Idt2 = T2.Idt1
  6. WHERE T1.Idt2 = 12
  7.         AND T2.Idt1 IS NOT NULL;
__________________
¿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 02/05/2013, 13:06
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Me devuelve un registro que no existe ¿WTF?

Hola gnzsoloyo gracias por responder, pero con tus codigos pasa lo mismo que en el original.

te pongo las consultas reales:

Original:
Código SQL:
Ver original
  1. SELECT albumes.Titulo , albumes.Descripcion , albumes.Fecha , COUNT( imagenes.Id_Imagen ) Cantidad_Imagenes FROM albumes LEFT JOIN imagenes ON albumes.Id_Album = imagenes.Id_Album WHERE albumes.Id_Album = '12';
Devuelve:
Cita:
Titulo | Descripcion | Fecha | Cantidad_Imagenes
NULL | NULL | NULL | 0
Con el INNER:
Código SQL:
Ver original
  1. SELECT albumes.Titulo , albumes.Descripcion , albumes.Fecha , COUNT( imagenes.Id_Imagen ) Cantidad_Imagenes FROM albumes INNER JOIN imagenes ON albumes.Id_Album = imagenes.Id_Album WHERE albumes.Id_Album = '12';
Devuelve:
Cita:
Titulo | Descripcion | Fecha | Cantidad_Imagenes
NULL | NULL | NULL | 0
Con el AS:
Código SQL:
Ver original
  1. SELECT albumes.Titulo , albumes.Descripcion , albumes.Fecha , COUNT( imagenes.Id_Imagen ) Cantidad_Imagenes FROM albumes INNER JOIN imagenes ON albumes.Id_Album = imagenes.Id_Album WHERE albumes.Id_Album = '12' AND imagenes.Id_Album IS NOT NULL;
Devuelve:
Cita:
Titulo | Descripcion | Fecha | Cantidad_Imagenes
NULL | NULL | NULL | 0
Ambas tablas estan vacias (Use el TRUNCATE y no hay nada en ninguna) y devuelve igual ese registro... ¿Que puedo hacer?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 02/05/2013, 13:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Me devuelve un registro que no existe ¿WTF?

Quita el COUNT y prueba...
__________________
¿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 02/05/2013, 13:27
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Me devuelve un registro que no existe ¿WTF?

Sin el COUNT anda bien... pero nesesito ese dato... si hago esta consulta sola:

Código SQL:
Ver original
  1. SELECT COUNT( Id_Imagen ) Cantidad_Imagenes
  2. FROM imagenes
  3. WHERE Id_Album =  '12'

devuelve 0... ya empieza a sonar mas logico...

¿No queda otra que hacer dos consultas separadas?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 02/05/2013, 13:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Me devuelve un registro que no existe ¿WTF?

No.... simplemente lo resuelves en la programación.
Si devuelve un sólo registro y el valor del COUNT es cero... No hay registros.
A mi entender es la mejor solución.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 02/05/2013, 13:48
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Me devuelve un registro que no existe ¿WTF?

Si, el tema es que puede devolver 0 habiendo registros, puede haber un album sin imagenes.
Tendre que preguntar por que todos lo campos sean nulos y el count=0 o dos consultas...
grrrrrrr, me voy a renegar al rincon con la computadora jajaja gracias por la ayuda
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #8 (permalink)  
Antiguo 02/05/2013, 13:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Me devuelve un registro que no existe ¿WTF?

Cita:
Si, el tema es que puede devolver 0 habiendo registros, puede haber un album sin imagenes.
No necesariamente. Sólo debes preguntar por el campo de ID de la primera tabla. No hace falta que recorras todo.
Lo que me extraña es que el INNER JOIN devuelva algo, pero podríamos probarlo así:
Código MySQL:
Ver original
  1.     A.Titulo,
  2.     A.Descripcion,
  3.     albumes.Fecha,
  4.     COUNT(I.Id_Album) Cantidad_Imagenes
  5.     albumes A
  6.     INNER JOIN imagenes I ON A.Id_Album = I.Id_Album
  7.     A.Id_Album = 12
  8. GROUP BY A.Id_Album;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 02/05/2013, 14:15
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Me devuelve un registro que no existe ¿WTF?

Genial Genial!!!!! :D :D esa consulta anda genial muchisimas gracias sos un crack con el SQL!!!
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: devuelve, join, registro, select, sql, 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:30.