Ho m: n relazione tra utenti e tag. Un utente può avere m tag e un tag può appartenere a n utenti. Le tabelle sono qualcosa del tipo:SQL SELECT con m: n relazione
USER:
ID
USER_NAME
USER_HAS_TAG:
USER_ID
TAG_ID
TAG:
ID
TAG_NAME
Diciamo che ho bisogno di selezionare tutti gli utenti, che hanno tag "mela", "Orange" e "banana". Quale sarebbe il modo più efficace per farlo usando SQL (MySQL DB)?
che è di sicuro non è più efficace come sarà aggregare tutti i record. Per esempio. se nessun utente corrisponde ai criteri, molto lavoro inutile sarà fatto 3 selfjoin è il modo efficace per andare – noonex
'@ noonex': su un dato di mondo reale (un sacco di utenti, molti tag, cardinalità di tag utente alta) questo è un efficiente modo. 'tag_name IN (...)' è una condizione di sargable, aggregherà solo i record con i tag di matematica. E se fosse necessario far corrispondere la query ai tag '4' o' 20'? Con self-join, è necessario riscrivere la struttura della query, con 'GROUP BY' solo i parametri. – Quassnoi