Tengo la relación m: n entre usuarios y etiquetas. Un usuario puede tener m etiquetas, y una etiqueta puede pertenecer a n usuarios. Tablas tienen el siguiente aspecto:SQL SELECT con la relación m: n
USER:
ID
USER_NAME
USER_HAS_TAG:
USER_ID
TAG_ID
TAG:
ID
TAG_NAME
Digamos que necesito para seleccionar todos los usuarios, que tienen etiquetas "Apple", "naranja" Y "banana". ¿Cuál sería la forma más efectiva de lograr esto usando SQL (MySQL DB)?
que es seguro que no es más eficiente como será agregar todos los registros. P.ej. si ningún usuario coincide con los criterios, se realizará mucho trabajo inútil 3 selfjoin es la manera más eficiente de hacerlo – noonex
'@ noonex': en un mundo real de datos (muchos usuarios, muchas etiquetas, alta cardinalidad de etiqueta de usuario) esto es un eficiente camino. 'tag_name IN (...)' es una condición sargable, agregará solo los registros con las etiquetas malignas. ¿Y si necesita hacer que la consulta coincida con las etiquetas '4' o' 20'? Con las autocombinaciones, deberá volver a escribir la estructura de la consulta, con 'GROUP BY' solo los parámetros. – Quassnoi