Oracle
 sql >> Database >  >> RDS >> Oracle

Come eseguire l'intersezione su una tabella di composizione

In termini di prestazioni, la tua query sembra OK. L'hai misurato per vedere se c'è davvero un problema?

Se (object1_id, object2_id) è unico, puoi scrivere la query in modo più conciso come segue:

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

Nota che il 6 è il numero di ID forniti. Questo dovrebbe essere modificato se viene fornito un numero diverso di ID. Dovresti misurare le prestazioni effettive sui tuoi dati per vedere se questo dà un aumento di velocità.

Se non puoi presumere l'unicità, questo dovrebbe funzionare:

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

La cosa più importante però è assicurarsi di avere indici appropriati sulla tua tavola! Questo è lontano più importante che scrivere una query o l'altra.