sql >> Database >  >> RDS >> Oracle

Vreemd gedrag van volledige outer join in Oracle - hoe kan dit worden verklaard?

De optimizer zou er niet voor moeten kiezen om de index op EMP.DEPT_ID te gebruiken in de tweede query, omdat deze NULL-waarden kan hebben. Dit is de reden dat het één rij van de resultaten uitsluit.

De enige niet-bug-verklaring die ik op dit moment kan bedenken, is dat je op de een of andere manier beperkingen hebt gemaakt in de DISABLE RELY-modus, zodat de optimizer denkt dat het veld geen NULL's kan bevatten. In dit geval zou het correct zijn om de index te gebruiken gezien de onjuiste informatie in de beperkingen. Het lijkt er echter op dat de RELY-optie niet beschikbaar is voor NOT NULL-beperkingen, dus ik zie niet in hoe dit het probleem zou kunnen zijn. Desalniettemin, kijk goed naar alle beperkingen op de tabellen.

Afgezien daarvan is er een verrassend aantal bugs op de Oracle-site met betrekking tot verkeerde resultaten van volledige outer joins. Je zou een van hen kunnen raken. In nogal wat van deze gevallen is de tijdelijke oplossing om "native" volledige outer joins uit te schakelen, wat u voor uw huidige sessie kunt doen met deze verklaring:

alter session set "_optimizer_native_full_outer_join"=off; 


  1. slechte record MAC SSL-fout tussen Java en PortgreSQL

  2. Python mysql controleren op duplicaat voor invoegen

  3. PL/SQL-basisconversie zonder functies

  4. sql selectL rijen naar kolommen zonder subquery