sql >> Databasteknik >  >> RDS >> Oracle

Hur man gör korsning på en sammansättningstabell

När det gäller prestanda ser din fråga OK ut. Har du mätt det för att se om det verkligen är ett problem?

Om (object1_id, object2_id) är unik så kan du skriva frågan mer kortfattat enligt följande:

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

Observera att 6 är antalet tillhandahållna ID:n. Detta bör ändras om ett annat antal ID:n tillhandahålls. Du skulle behöva mäta den faktiska prestandan på din dadta för att se om detta ger någon hastighetsökning.

Om du inte kan anta unikhet bör detta fungera:

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

Det viktigaste är dock att se till att du har lämpliga index på ditt bord! Det här är långt viktigare än om du skriver den ena eller den andra frågan.



  1. SQL Server - Vad händer när en rad i en tabell uppdateras?

  2. Gör MySQL view alltid full tabellskanning?

  3. Använder radräkning från en temporär tabell i en while loop SQL Server 2008

  4. MySQL:Godkännande av procedurparametrar för att EXECUTE USING-satsen