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

Ayuda con una sentencia SQL en mysql

Estas en el tema de Ayuda con una sentencia SQL en mysql en el foro de Mysql en Foros del Web. Hola Tengo 3 tablas cute_news, cute_story y cute_image cute_news tiene estos campos: fecha, id cute_story: post_id, noticia cute_image: id, nombre Pues bien, quiero una consulta ...
  #1 (permalink)  
Antiguo 30/03/2010, 04:59
 
Fecha de Ingreso: noviembre-2005
Mensajes: 186
Antigüedad: 19 años
Puntos: 1
Ayuda con una sentencia SQL en mysql

Hola

Tengo 3 tablas cute_news, cute_story y cute_image

cute_news tiene estos campos: fecha, id
cute_story: post_id, noticia
cute_image: id, nombre

Pues bien, quiero una consulta donde salga : fecha,noticia,nombre. Hay que tener en cuenta que id de cute_news es igual a post_id de cute_story y id de cute_image. Pero cuidado tienen que salir todas las fechas y noticias donde cute_news.id = cute_story.post_id, INDEPENDIENTEMENTE , de si cute_image.id tiene o no un valor, si tiene un valor saldrá fecha,noticia y el valor de cute_image.nombre, y si no tiene valor saldrá fecha,noticia y NULL, pero saldrá la fila.

No termino con left, right join conseguir la consulta que busco.

Saludos
  #2 (permalink)  
Antiguo 30/03/2010, 05:23
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: Ayuda con una sentencia SQL en mysql

Bien. Tu mismo te estás planteando la solución:

- Si CUTE_NEWS es la tabla cuyo registro siempre existe, y CUTE_STORY, siempre está relacionada en 1:1, esas dos se usan con INNER JOIN, no con LEFT o RIGHT, y en ese mismo orden:
Código MySQL:
Ver original
  1. SELECT n.id, n.fecha, s.noticia
  2. FORM cute_news n INNER JOIN cute_story s ON n.id = s.post_id;
Nota: Si la relación es mandatoria y la cardinalidad 1:1, es probable que ambas sean en realidad una sola tabla y la separación esté siendo artificial.

- Si CUTE_IMAGE es opcional, entonces va con LEFT JOIN, y sólo después de CUTE_NEWS:
Código MySQL:
Ver original
  1.     n.id,
  2.     n.fecha,
  3.     s.noticia,
  4.     IFNULL(i.nombre,'') nombre
  5. FORM cute_news n INNER JOIN cute_story s ON n.id = s.post_id
  6.     LEFT JOIN cute_image i ON n.id = s.id;
Esto debería funcionar, porque los registros de las dos primeras tablas retornarían si o si, mientras que la relación con los otros podría devolver NULL, para lo cual se pone la función IFNULL() a fin de evitar que aparezca ese no-valor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sentencia, sql
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 13:54.