Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

consulta SQL complexa, muitos para muitos


Algo assim.
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)

Em inglês (o que pode ou não deixar mais claro.)
  • Selecione o nome da pessoa e o número de interesses que ela compartilha
  • Da tabela de pessoas
  • Junte-se à tabela de interesses de forma que essa tabela
  • São apenas os interesses da pessoa que estamos tentando corresponder.
  • (grupo por pessoas
  • e ordene pelo número de interesses correspondentes.)

Atualizado sem a subconsulta, mas 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)