Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment faire une intersection sur une table de composition

En termes de performances, votre requête semble correcte. L'avez-vous mesuré pour voir s'il y a vraiment un problème ?

Si (object1_id, object2_id) est unique, vous pouvez rédiger la requête de manière plus concise comme suit :

SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6

Notez que le 6 est le nombre d'identifiants fournis. Cela devrait être changé si un nombre différent d'ID est fourni. Vous devrez mesurer les performances réelles de votre dadta pour voir si cela donne une augmentation de la vitesse.

Si vous ne pouvez pas supposer l'unicité, cela devrait fonctionner :

SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6

La chose la plus importante est cependant de vous assurer que vous disposez des index appropriés à votre table ! C'est loin plus important que d'écrire une requête ou l'autre.