2010-03-04 4 views
0

J'ai une jointure dans une requête oracle qui ressemble à:comment changer/simplifier les jointures dans l'oracle

 FROM eiv.table1 
      eiv.table2 b 
     WHERE a.state_cd = 
      b.state_code(+) 

qu'est-ce que l'(+) vers la fin signifie?

Avec cette requête, j'ai remarqué que parfois je reçois un espace vide lorsque les enregistrements ne correspondent pas dans les tables.

Est-ce une jointure externe gauche ou droite? Comment cela peut-il être simplifié?

+0

Dupliquer: http://stackoverflow.com/questions/2268732/converting -oracle-sql-select-en-posgresql-select –

+0

merci, cela aide – drake

Répondre

1
SELECT * 
FROM eiv.table1 a 
LEFT JOIN 
     eiv.table2 b 
ON  b.state_code = a.state_cs 

Avant 9i, Oracle ne prennent pas en charge ANSI syntaxe de jointure et (+) clause a été utilisée au lieu.

0

Cela signifie que c'est une jointure externe gauche ... Détails viennent toujours d'un, et viennent seulement de b quand la condition est remplie ...

DE eiv.table1 eiv.table2 b WHERE a .state_cd = b.state_code (+)

=

de evi.table1 une jointure gauche eiv.tableb b sur (a.state_cd = b.state_code)

Vous pouvez donner quelques tu ght d'utiliser le même nom de colonne pour le code d'état sur les deux tables, mais il peut être un peu en retard pour ça ...

0

http://www.adp-gmbh.ch/ora/sql/outer_join.html

« Cela pourrait être ce que l'on veut ou il peut-être pas. En supposant que nous voulons retour tous les numéros, même si la traduction allemand manque, nous avons besoin d'une jointure externe. une jointure externe utilise un (+) du côté de l'opérateur (qui, dans ce cas se trouve être l'égalité opérateur ) où nous voulons avoir des valeurs nulles retourné si aucun valeur correspond à:

select l.v "English", r.v "Allemand" de r, l où l.i
= r.i (+) et r.l (+) = 'de';

Et cela retourne une ligne pour chaque mot anglais, même s'il n'y a pas traduction allemande:

Anglais Allemand ------------------- - -------------------- un deux zwei trois drei quatre cinq "

Questions connexes