2016-11-08 1 views
-2

J'ai fait des recherches pour Oracle jointures externes sql pour voir s'il y a une coupure (comme je pense que dans mysql vous pouvez faire où un * = b je crois, qui pourrait faire une jointure externe). J'ai trouvé une chose qui semblait prometteuse mais qui n'a pas marché. J'essaye de trouver un raccourci parce que je ne peux jamais me souvenir de la syntaxe extérieure de jointure. Je dois le chercher tout le temps. Prenez ceci par exemple:jointure externe dans Oracle sql

SELECT 
    l.*, 
    r.* 
FROM database.login l LEFT OUTER JOIN database.relation r 
    ON l.user_id = r.user_id 
     AND r.user_id IS NULL 

Plusieurs valeurs de r.user_id étaient nulles comme prévu. J'ai essayé ce que je lis quelque part:

SELECT 
    l.*, 
    r.* 
FROM database.login l, database.relation r 
WHERE l.user_id = +r.user_id 

mais ne pas sélectionner les lignes de database.relation qui n'ont pas un database.login correspondant user_id.

Alors vous devez taper cette syntaxe entière? J'essaie d'obtenir une entrée dans la connexion pas en relation.

Je suppose que je pourrais utiliser quelque chose comme ce qui suit:

u.user_id not in select user_id from database.relation 

si nécessaire

+2

Qu'est-ce qui ne va pas dans la première requête? –

+0

À mon humble avis, vous devriez prendre le temps d'apprendre la syntaxe de jointure ANSI. Ce n'est pas vraiment difficile: 'select * from some_table some_other_table '. Vous avez juste besoin de savoir quel type de jointure utiliser, qui va avec vos conditions de jointure – Boneist

Répondre

0

Vous pouvez faire comme ceci:

select l.*, r.* 
from database.login l, database.relation r 
where l.user_id = r.user_id (+) 

pour jointure externe gauche et

select l.*, r.* 
from database.login l, database.relation r 
where l.user_id (+) = r.user_id 

pour droit t jointure externe

+4

Même Oracle recommande de ne pas ** ** utiliser l'opérateur '(+)' plus. –

+0

Pourtant, c'est un moyen d'implémenter des jointures externes avec une syntaxe plus courte. J'utilise ceci tout le temps, et n'ai jamais rencontré un problème. Il est permis de l'utiliser s'il est utilisé avec précaution. – Nemanja91

+0

@ Nemanja91 Vous n'avez évidemment pas essayé de faire une jointure comme 'SELECT * FROM t1, t2, t3 OERE t1.col1 = t2.col1 (+) ET t2.col2 (+) = t3.col1;', parce que vous donne 'ORA-01417: une table peut être jointe extérieurement à au plus une autre table' alors que' SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col1 = t2.col1) RIGHT OUTER JOIN t3 ON (t2.col2 = t3.col1); 'fonctionne très bien! – Boneist