sql >> Base de Datos >  >> RDS >> Mysql

consulta SQL compleja, muchos a muchos

Algo como esto.

Select people.id, people.name, count(interest.id)
from people
left join people_interests on people.id = people_interests.peopleid 
left join interests on people_interests.interestid = interests.interest.id
where interests.id in (select id from interests where interests.peopleid = @inputuserid)
group by people.id, people.name
order by count(interest.id)

En inglés (lo que puede o no aclararlo).

  • Seleccione el nombre de la persona y la cantidad de intereses que comparte
  • De la mesa de personas
  • Únase a la mesa de intereses de tal manera que esa mesa
  • Es solo los intereses de la persona que estamos tratando de hacer coincidir.
  • (agrupar por personas
  • y ordenar por el número de intereses que coinciden).

Actualizado sin la subconsulta pero menos claro

Select people.id, people.name, count(interest.id)
from people
left join people_interests on people.id = people_interests.peopleid 
left join interests on people_interests.interestid = interests.interest.id
inner join interest i2 on (interests.id = i2.id and i2.people_id = @inputuserid)
group by people.id, people.name
order by count(interest.id)