sql >> Databasteknik >  >> RDS >> Oracle

Orakel. Förhindrar sammanfogning av underfråga och huvudfrågevillkor

ROWNUM är det säkraste sättet att förhindra optimeringstransformationer och säkerställa typsäkerhet. Använder ROWNUM får Oracle att tro att radordningen spelar roll, och förhindrar saker som predikat-pushing och view-fusion.

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

Det finns andra sätt att göra detta men inget av dem är pålitligt. Bry dig inte om enkla inline-vyer, vanliga tabelluttryck, CASE , predikatordning eller tips. Dessa vanliga metoder är inte tillförlitliga och jag har sett dem alla misslyckas.

Den bästa långsiktiga lösningen är att ändra EAV-tabellen så att den har en annan kolumn för varje typ, som jag beskriver i det här svaret . Åtgärda detta nu, annars kommer framtida utvecklare att förbanna ditt namn när de måste skriva komplexa frågor för att undvika typfel.



  1. Kör ProxySQL som Kubernetes Service

  2. MySQL kan inte känna igen koreanska tecken

  3. Varför har vissa kommandon ingen effekt i psql?

  4. Möjligt att göra en MySQL främmande nyckel till en av två möjliga tabeller?