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

Seleccionar de dos tablas con tabla intermedia

Estas en el tema de Seleccionar de dos tablas con tabla intermedia en el foro de Mysql en Foros del Web. Saludos. Tengo dos tablas con relación x,x es decir que tengo que usar una tabla intermedia para crear las relaciones: videos: id, titulo tags: id, ...
  #1 (permalink)  
Antiguo 31/10/2008, 14:10
oom
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santiago de Compostela
Mensajes: 61
Antigüedad: 20 años, 7 meses
Puntos: 0
Pregunta Seleccionar de dos tablas con tabla intermedia

Saludos.

Tengo dos tablas con relación x,x es decir que tengo que usar una tabla intermedia para crear las relaciones:

videos: id, titulo
tags: id, nombre
relaciones: id_videos, id_tags

Lo que quiero es hacer una consulta que me liste todos los tags y que me diga si estan relacionados con un video específico (por ejemplo id=4).
La prueba que hice es esta:

SELECT tags.id, tags.nombre, video.id as tiene_video
FROM tags
LEFT JOIN relaciones ON relaciones.id_tags = etiquetas.id
LEFT JOIN videos ON relaciones.id_videos = 4

Esto lo que hace es devolverme el id y el nombre del tag y el id del video (que siempre es 4) si está relacionado, sinó me devuelve NULL, es decir:

id nombre tiene_video
1 noticias NULL
2 humor NULL
3 deporte NULL
3 deporte 4
3 deporte NULL
4 cine 4
4 cine NULL

Lo que pasa es que me devuelve duplicados los registros (supongo que por cada video que tenga relacionado el tag aunque no sea el de id 4). Si le pongo un GROUP BY tags.id me devuelve lo siguiente:

id nombre tiene_video

1 noticias NULL
2 humor NULL
3 deporte NULL
4 cine 4

Es decir, me devuelve los tags como quiero pero el valor tiene_video no es fiable porque solo devuelve el primer valor que encontró (en deporte me devuelve NULL pero en la anterior consulta también devolvía el id 4, mientras que en cine me devuelve el resultado correcto porque es el primer valor de la anterior consulta).

Hai alguna manera de hacer esto en una consulta? Se pueden hacer un LEFT JOIN con dos tablas al mismo tiempo en vez de dos LEFT JOIN? o hai algun tipo de JOIN que una las tablas sin duplicar registros en la tabla de la izquierda?
  #2 (permalink)  
Antiguo 31/10/2008, 14:48
 
Fecha de Ingreso: septiembre-2008
Mensajes: 53
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Seleccionar de dos tablas con tabla intermedia

Si usas Usas Mysql 5.0 para arriba te deberia funcionar esto:

Código:
SELECT tags.id, tags.nombre, IFNULL((SELECT 1 FROM relaciones WHERE id_tags=tags.id LIMIT 1),0) as tiene_video
FROM tags
  #3 (permalink)  
Antiguo 31/10/2008, 23:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar de dos tablas con tabla intermedia

Creo que con esto encontrarás lo que buscas:
Código sql:
Ver original
  1. SELECT t.id, t.nombre, videos.titulo AS tiene_video FROM tags t LEFT JOIN
  2. (SELECT id_tags AS idd, videos.id vid FROM relaciones
  3. INNER JOIN tags ON relaciones.id_tags = tags.id
  4. INNER JOIN videos ON videos.id = relaciones.id_videos WHERE id_videos = 4 GROUP BY id_tags)t1
  5. ON t.id = t1.idd LEFT JOIN videos ON videos.id = t1.vid

Última edición por jurena; 01/11/2008 a las 13:29
  #4 (permalink)  
Antiguo 01/11/2008, 12:09
oom
 
Fecha de Ingreso: septiembre-2003
Ubicación: Santiago de Compostela
Mensajes: 61
Antigüedad: 20 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Seleccionar de dos tablas con tabla intermedia

Oh, muchas gracias. Las dos respuestas me valen. Creo que usaré la segunda por ser compatible con versiones más antiguas de mysql.
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 20:26.