sql >> Database >  >> RDS >> Oracle

Oracle:Bottom-up verwijderen

Aangezien u geïnteresseerd bent in het algoritme, lijkt uw vraag neer te komen op het verschil tussen IN en EXISTS aangezien je twee voorbeelden hetzelfde zijn, behalve de IN veranderen naar een EXISTS in het verwijderen van het CHILD tafel.

Er is in de loop der jaren nogal wat geschreven over dit verschil, maar in wezen IN wordt over het algemeen gebruikt waar het aantal vergelijkers klein is, terwijl EXISTS is efficiënter voor subquery's die een groter aantal vergelijkers retourneren (vooral als die waarden een groot aantal duplicaten bevatten).

IN moet elke geretourneerde comparator evalueren terwijl EXISTS is tevreden wanneer het de eerste wedstrijd tegenkomt.

Hierop zijn uitzonderingen en als je erop googelt, zul je ze vinden, maar over het algemeen lijkt dit waar te zijn.

Tom Kyte (Oracle VP) heeft hier een heel goed antwoord met uitleg:http://asktom.oracle.com/pls/asktom/f?p=100:11:2148775836129778::::P11_QUESTION_ID:953229842074

TechRepublic heeft hier ook een goede uitleg:http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080

Ik hoop dat dit helpt...




  1. Mysql_real_escape_string() Waarschuwing Verwarring

  2. SQL meerdere rijen in één

  3. Schakel SQL Server Agent in via SSMS

  4. Hoe kom ik erachter welke FOREIGN KEY-beperking verwijst naar een tabel in SQL Server?