Supongamos que tengo una tabla de "etiquetas" con dos columnas: TagID y ContentID. Cada fila representa una etiqueta asignada a un contenido. Quiero una consulta que me dará la ContentID de cada pieza de contenido que está etiquetado con tagids 334, 338, y 342.consulta SQL: Simulación de una "Y" sobre varias filas en lugar de sub-consulta
La forma "fácil" de hacer esto sería ( pseudocódigo):
select contentid from tags where tagid = 334 and contentid in (
select contentid from tags where tagid = 338 and contentid in (
select contentid from tags where tagid = 342
)
)
Sin embargo, mi instinto me dice que hay una manera mejor, más rápida, más extensible para hacer esto. Por ejemplo, ¿qué pasa si necesito encontrar la intersección de 12 etiquetas? Esto podría ser espantoso rápidamente. ¿Algunas ideas?
EDIT: Resulta que esto también está cubierto en this excellent blog post.
Eso es todo. Aunque si tagid, contentid es único, entonces quizás DISTINCT no sea necesario en COUNT (DISTINCT tagID) – tzot
Solución muy inteligente, pero necesitaría un ajuste en nuestra instalación de SQL2000. No podemos usar "tener" sin tener una agregación en la cláusula de selección. Sin embargo, es bastante fácil de evitar. –
¿Esto funcionaría tanto en MySQL como en Oracle? –