unir 3 tablas sql join

Tengo 3 mesas users(name, email), reviews(review, entity, user) and votes(vote, entity, user), quiero hacer una consulta que devuelva todas las revisiones dadas para una entidad en particular, y votar desde la tabla de votos si el usuario votó por esa entidad, de lo contrario, nulo debería estar allí en el lugar de la votación. La consulta que escribí es

select users.name as name, 
reviews.review as review, 
votes.vote as vote 
from 
users join reviews on users.email=reviews.user 
left join votes on users.email=votes.user 
where reviews.entity='entity_id'

Pero esta consulta genera varias filas para algunas revisiones, lo hice funcionar usando el grupo por, porque no puedo entender el comportamiento de la combinación izquierda,

preguntado el 28 de julio de 12 a las 16:07

1 Respuestas

No está uniendo votos para ninguna entidad específica, intente lo siguiente:

select users.name as name, 
reviews.review as review, 
votes.vote as vote 
from 
users join reviews on users.email=reviews.user 
left join votes on users.email=votes.user and reviews.entity = votes.entity
where reviews.entity='entity_id'

Respondido 28 Jul 12, 16:07

Recuerde la cláusula group by como OP dice: "Pero esta consulta genera varias filas para algunas revisiones, lo hice funcionar usando group by..." - dani herrera

Tendría que ver la versión de trabajo, pero dudo que los resultados sean correctos al agregar un grupo por. La consulta seguiría buscando reseñas con la entidad 'entity_id', pero votaría por cualquier entidad del mismo usuario. - Carl

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.