2013-08-22 9 views

risposta

15

Tu sei molto meglio usare la sintassi ANSI

SELECT * 
    FROM a 
     LEFT OUTER JOIN b ON(a.id = b.id and 
          b.val = 'test') 

È possibile fare la stessa cosa usando la sintassi di Oracle come pure, ma diventa un po 'Hinkey

SELECT * 
    FROM a, 
     b 
WHERE a.id = b.id(+) 
    AND b.val(+) = 'test' 

Si noti che in entrambi i casi, sto ignorando la tabella c poiché non si specifica una condizione di join. E presumo che tu non voglia realmente unirti a A a B e quindi generare un prodotto cartesiano con C.

+0

È corretto: SELECT * FROM a, b WHERE a.id = b.id (+) AND b.val (+) = 'test' e b.col2 (+) = 'test2'; Desidero ottenere tutte le righe da una riga se corrispondente in b è nulla o la riga corrispondente in b ha col2 = 'test2' e val = 'test' Quindi, è nullo OR (col2 = 'test2' AND val = 'test') – Victor

1

Spostare la condizione nella clausola JOIN e utilizzare il modello di join standard ANSI.

SELECT NameYourFields,... 
FROM A 
LEFT OUTER JOIN B 
ON A.ID = B.ID 
AND B.VAL = 'test' 
INNER JOIN C 
ON ... 
0

Un JOINT OUTER SINISTRO è una delle operazioni JOIN che consentono di specificare una clausola join. Conserva le righe non corrispondenti dalla prima tabella (a sinistra), unendole con una riga NULL nella forma della seconda (a destra) tabella.

modo da poter fare come segue:

SELEZIONA
DAL un join esterno sinistro b ON a.id = b.id

--Nota di aver utilizzato le virgolette "test", che non è usato per varchar in SQL, dovresti usare la citazione singola 'test'

AND b.val = 'test';

1
SELECT * FROM abc a, xyz b 
WHERE a.id = b.id 
    AND b.val = 'test' 
+0

Ciao e benvenuto in SO. Grazie per il tuo contributo, ma sarebbe estremamente utile se tu potessi espandere la tua risposta con alcuni dettagli su come risponde alla domanda dei Victors. – Deepend