web-dev-qa-db-fra.com

Développeur SQL "déconnecté du reste du graphique de jointure"

J'ai le SQL suivant:

select <misc things>
from pluspbillline 
left outer join workorder 
    on workorder.siteid=pluspbillline.siteid 
    and workorder.wonum = pluspbillline.refwo
    and workorder.orgid = pluspbillline.orgid
left outer join ticket
    on ticket.ticketid = pluspbillline.ticketid
    and ticket.class=pluspbillline.ticketclass
left outer join pluspsalesorder
    on pluspsalesorder.salesordernum=pluspbillline.salesordernum
    and pluspsalesorder.siteid=pluspbillline.siteid

Dans Oracle SQL Developer 4.0.0.13 (connecté à une base de données DB2), j'obtiens une ligne ondulée sous l'italique suivant: "from pluspbillline" and "left external join workorder" .

L'avertissement indique que "pluspbillline est déconnecté du reste du graphique de jointure". Qu'est-ce que ça veut dire?

17
ESP

Je ne sais pas ce qui fait que Oracle SQL Developer donne l'erreur. Mais je mets ce commentaire ici pour le formater correctement.

Un graphique de jointure pourrait ressembler à ceci

pluspbillline  ------+----<  workorder
                     |
                     +----<  ticket
                     |
                     +----<  pluspsalesorder

Les lignes du graphique peuvent être étiquetées avec les champs de jointure. Mais cela vous donne une idée de base.

Je ne vois aucune raison pour laquelle vous recevez cet avertissement. Une faute de frappe de nom de colonne dans votre SQL peut-être? Ou une bizarrerie dans l'interface d'Oracle qui ne comprend pas correctement les métadonnées DB2? J'ai suggéré d'essayer l'outil d'IBM pour voir s'il s'agit simplement de leur programme.

0
WarrenT

Je l'ai aussi. Je ne sais pas exactement comment l'articuler, mais l'erreur semble être basée sur le flux logique du code.

Essentiellement parce que vous mentionnez la table pluspbillline avant workorder Je pense qu'elle s'attend à ce que la jointure soit on pluspbillline.siteid=workorder.siteid etc.

Il semble que l'ordre des conditions des jointures devrait découler des premières tables identifiées aux dernières. Donc, ce qui suit devrait le rendre heureux:

plusbillline to workorder       on pluspbillline.siteid=workorder.siteid...
    ""       to ticket          on pluspbillline.ticketid = ticket.ticketid...
    ""       to pluspsalesorder on pluspbillline.salesordernum = pluspsalesorder.salesordernum...

Je ne pense pas que cela changerait le travail d'Oracle (en supposant que vous n'utilisiez pas d'indicateurs d'optimisation), donc je ne prendrais la peine de changer que si vous détestez les lignes ondulées.

30
Ewanw

J'ai eu le même message en survolant le mot "GAUCHE", mais la requête entière s'est déroulée sans problème. D'un autre côté, lorsque j'ai survolé "AVEC", j'ai reçu un conseil sur la restructuration de la requête entière. Ainsi, ce message sur la déconnexion pourrait ne pas être un signe d'erreur, mais un avertissement concernant une phrase trop complexe. L'éditeur de SQLDeveloper ne mentionne pas le niveau du problème.

0
Gangnus

Le problème est dû au fait que la procédure Oracle a le même paramètre d'entrée nommé que la colonne de la table à laquelle vous vous joignez.
. .bank_nbr

0
Mark