Friss topikok

Outer join vs. IN vagy OR

2008.08.18. 15:18 | koc | Szólj hozzá!

Vannak esetek amikor valódi problémát jelent az, hogy az IN operandus, illetve az OR kapcsolat a feltételek között nem használható outer join esetén. Pélául az alábbi feltétel:

t1.month(+) IN (200808, 200809)

az alábbi hibaüzenetet dobja:

ORA-01719: outer join operator (+) not allowed in operand of OR or IN

Erre a legtermészetesebb elkerülő lehetőség, ha az IN-es vagy OR-os szűrő feltételt egy inline view-ban alkalmazzuk

(SELECT * FROM table WHERE month in (200808, 200809)) t1

Amennyiben ez nem lehetséges, akkor is vannak további kerülőutak. Ha például a IN halmaz egy zárt dátum vagy számhalmaz, akkor használhatunk betweent:

t1.month(+) BETWEEN 200808 AND 200809

Ha belegondolunk ez nem csoda, hiszen ez egy AND-es feltétellel egyenértékű.

A legnagyobb trükk viszont szerintem a DECODE használata:

DECODE(t1.month(+),200808,1,200809,1,0) = 1

Ez ugyanis előbb dekódol, aztán nézi meg, hogy kell-e outer sort igénybe venni, így az IN funkcionalitást tökételesen megvalósítja.

· 1 trackback

Címkék: in or decode outer join

A bejegyzés trackback címe:

https://plsql.blog.hu/api/trackback/id/tr17621396

Trackbackek, pingbackek:

Trackback: firenzedigital.com 2017.09.21. 22:13:45

Mi is az a Facility Management? - ingatag ingatlan

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása