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

Oracle. Forhindring af fletningsunderforespørgsel og hovedforespørgselsbetingelser

ROWNUM er den sikreste måde at forhindre optimeringstransformationer og sikre typesikkerhed. Bruger ROWNUM får Oracle til at tro, at rækkefølgen har betydning, og forhindrer ting som prædikat-skub og visningssammenlægning.

select *
from
(
   select id, value, rownum --Add ROWNUM for type safety.
   from eav
   where attr like 'sal%' 
)
where to_number(value) > 5000;

Der er andre måder at gøre dette på, men ingen af ​​dem er pålidelige. Lad være med at bruge simple indlejrede visninger, almindelige tabeludtryk, CASE , prædikatrækkefølge eller hints. Disse almindelige metoder er ikke pålidelige, og jeg har set dem alle mislykkes.

Den bedste langsigtede løsning er at ændre EAV-tabellen til at have en anden kolonne for hver type, som jeg beskriver i dette svar . Løs dette nu, ellers vil fremtidige udviklere forbande dit navn, når de skal skrive komplekse forespørgsler for at undgå typefejl.



  1. Adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:Ja) efter nulstilling af adgangskode LINUX

  2. Finde andelen af ​​hvert X bestående af Y i PostgreSQL?

  3. STRING_AGG() Funktion i PostgreSQL

  4. Hvordan registrerer jeg daglige placeringer for en model i Django?