sql >> Database >  >> RDS >> Oracle

Orakel. Subquery- en hoofdqueryvoorwaarden samenvoegen voorkomen

ROWNUM is de veiligste manier om optimalisatietransformaties te voorkomen en typeveiligheid te waarborgen. ROWNUM gebruiken laat Oracle denken dat de rijvolgorde van belang is en voorkomt zaken als predikaat pushen en samenvoeging van weergaven.

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

Er zijn andere manieren om dit te doen, maar geen van hen is betrouwbaar. Doe geen moeite met eenvoudige inline-weergaven, algemene tabeluitdrukkingen, CASE , predikaatvolgorde of hints. Die gebruikelijke methoden zijn niet betrouwbaar en ik heb ze allemaal zien falen.

De beste oplossing voor de lange termijn is om de EAV-tabel te wijzigen om voor elk type een andere kolom te hebben, zoals ik beschrijf in dit antwoord . Los dit nu op, anders zullen toekomstige ontwikkelaars je naam vervloeken als ze complexe zoekopdrachten moeten schrijven om typefouten te voorkomen.



  1. Node.js Async/wait gebruiken met mysql

  2. Detecteer of een datum in de zomertijd valt in MySql

  3. Hoe echo ik een Resource-id #6 van een MySql-antwoord in PHP?

  4. Het is beter om minder dan gelijk aan of in te gebruiken in sql-query