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

Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos

Estas en el tema de Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos en el foro de Bases de Datos General en Foros del Web. Hola, Tengo 3 tablas: usuarios (id, nombre, mail, etc.) links (id,id_usr,texto) comentarios (id,id_usr,texto) al hacer la consulta Código: SELECT * FROM ( (usuarios u LEFT ...
  #1 (permalink)  
Antiguo 06/11/2009, 07:04
 
Fecha de Ingreso: abril-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Pregunta Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos

Hola,

Tengo 3 tablas:
usuarios
(id, nombre, mail, etc.)
links
(id,id_usr,texto)
comentarios
(id,id_usr,texto)

al hacer la consulta
Código:
SELECT * 
FROM (
(usuarios u 
LEFT JOIN 
links l ON l.id_usr = u.id) 
LEFT JOIN 
comentarios ON c.id_usr = u.id
);
Obtengo una tabla con todos los datos. Pero todos los comentarios aparecen repetidos para cada entrada de la tabla link.

Busco un resultado similar al ejemplo:

usuarios | links | comentarios
----------------------------------------
usr1 | link1 | comentA
usr1 | link5 | comentH
usr2 | link2 | comentB
usr2 | link3 | comentC
usr2 | link4 | comentD
usr3 | (null) | (null)
usr4 | link6 | comentE
usr4 | (null) | comentF
usr4 | (null) | comentG

En definitiva, las tablas links y comentarios son independientes, quiero listar en la búsqueda todos los links y los comentarios de cada usuario pero sin repetir los comentarios para cada entrada de link. ¿alguien me sabe decir como se escribe eso en SQL?

Última edición por ssoler; 06/11/2009 a las 07:06 Razón: Ventana de codigo no visible por barra de desplazamiento
  #2 (permalink)  
Antiguo 06/11/2009, 09:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos

Código sql:
Ver original
  1. SELECT *
  2. FROM (
  3. (usuarios u
  4. LEFT JOIN
  5. links l ON l.id_usr = u.id)
  6. LEFT JOIN
  7. comentarios ON c.id_usr = u.id) GROUP BY cometarios;

así?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 10/11/2009, 02:38
 
Fecha de Ingreso: abril-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Respuesta: Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos

Hola huesos52, con el group by me obliga a poner todas las columnas que no tengan operador aritmetico para agruparlas, con lo que no me resuelve el problema, ya que al colocar todas las columnas en el group by para que funcione, el resultado es el mismo que con SELECT DISTINCT, y como las combinaciones de valores son distintas no elimina ninguna fila.

Pero gracias por responder, yo sigo sin averiguar como hacerlo, a ver si se le ocurre a alguien.
  #4 (permalink)  
Antiguo 10/11/2009, 06:35
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos

Cita:
con el group by me obliga a poner todas las columnas que no tengan operador aritmetico para agruparlas,
Pensé que trabajas en mysql. En mysql si es posible. Con que trabajas?

si pones los create table de las 3 tablas con algunos insert de ejemplo, sería mas fácil para alguien ayudarte.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 10/11/2009, 07:22
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, 5 meses
Puntos: 2658
Respuesta: Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos

Cita:
con el group by me obliga a poner todas las columnas que no tengan operador aritmetico
¿Estás trabajando en Oracle?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 11/11/2009, 03:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos

Hola,

no se si serà un problema de motores.... pero ese group by no da lo que se pide.

Pero, en caso que lo sea, me podeis explicar como se puede dar este resultado

usuarios | links | comentarios
----------------------------------------
usr1 | link1 | comentA
usr1 | link5 | comentH

si la tabla de comentarios y de links son independientes luego por que el comentA se va a relacionar con

usr1 | link1

y no con

usr1 | link5


a mi entender el resultado buscado no es posible a nivel de algebra relacional.... y por tanto no lo deberia ser en ningun motor que pretenda ser relacional...

puesto que si comentA
esta relacionado con usr1
luego lo esta con usr1 | link1 y con usr1 | link5

y así con todos los links relacionados con usr1....

La única forma seria que la tabla comentarios no fuera independiente de links


usuarios
(id, nombre, mail, etc.)
links
(id,id_usr,texto)
comentarios
(id,id_usr,id_lnk,texto)


luego se podria hacer


Código sql:
Ver original
  1. SELECT *
  2. FROM (
  3. (usuarios u
  4. LEFT JOIN
  5. links l ON l.id_usr = u.id)
  6. LEFT JOIN
  7. comentarios ON c.id_usr = u.id AND c.id_lnk=l.id)

Y aun así luego se repetirian los links que tengan mas de un comentario igual que se repiten los usuarios....

y además quizas se estaria modificando el sentido de la bbdd....

Quim

Última edición por quimfv; 11/11/2009 a las 03:36
  #7 (permalink)  
Antiguo 11/11/2009, 05: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: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta 3 tablas LEFT JOIN sin repetir los datos del ultimo join datos

Completamente de acuerdo con quimfv.
Cuando comentas esto:
Cita:
En definitiva, las tablas links y comentarios son independientes, quiero listar en la búsqueda todos los links y los comentarios de cada usuario pero sin repetir los comentarios para cada entrada de link.
De base no es posible, porque no estás poniendo ninguna forma de relacionar el link on el comentario. Si no se relaciona de ningún modo, lo que lograrás será crear un producto cartesiano, ya que lo único que tienes en común entre ambas tablas (LINKS y COMENTARIOS) es el usuario. Así, el resultado sería:
Cita:
usuarios | links | comentarios
----------------------------------------
usr1 | link1 | comentA
usr1 | link1 | comentH
usr1 | link5 | comentA
usr1 | link5 | comentH
usr2 | link2 | comentB
usr2 | link2 | comentC
usr2 | link2 | comentD
usr2 | link3 | comentB
usr2 | link3 | comentC
usr2 | link3 | comentD
usr2 | link4 | comentB
usr2 | link4 | comentC
usr2 | link4 | comentD
usr3 | (null) | (null)
usr4 | link6 | comentE
usr4 | link6 | comentF
usr4 | link6 | comentG
usr4 | (null) | comentF
usr4 | (null) | comentG
O pones una tabla más que los relacione, o le pones el ID del link al comentario o al comentario en del link.
Tu elige.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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.