Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour
J'ai 2 tables appelons les A et B.
Ces 2 tables ont le même trinôme (triptyque) comme clé
- ID Père
- Activité
- Année
Chaque table a une info spécifique . appelons les A1 et B1
Mais il se peut que une ligne présente dans A n'ait pas son équivalent dans B. Trinôme (ID Père,Activité,Année) présent dans A non présent dans B
Je dois afficher sur une même ligne les infos A1 et B1 pour toutes les lignes issues de A même si elles n'ont pas leur équivalent dans B
Je pensai le faire sous forme de proc stock mais je ne peux pas utiliser les procédures stockées
je ne peux pas faire de jointure externe partielle style
A.ID = B.ID AND A.activite = B.activite AND A.annee *= B.annee
OU
A.ID *= B.ID AND A.activite *= B.activite AND A.annee *= B.annee
Je pensai faire 2 dw une sur chaque table et mettre a jour la 1ere (celle sur A) avec les infos de la 2e (celle de B) mais comment faire un update d'une dw a partir d'une autre
ou si vous avez une autre solution je suis preneur
merci d'avance
ps; si vous comprenez pas tout ecrivez moi je detaillerai mon explication
Dernière modification par remypb (19-04-2013 10:24:08)
Hors ligne
Bonjour,
J'ai pas tout compris...
C'est quelle info que tu dois updater ?
Hors ligne
je dois rien updater
je dois afficher toutes les lignes présentes dans les 2 tables A et B
Exemple
----------
Dans A, j'ai les lignes (1,'A',2010,'A1'); (1,'A',2011,'A2'); (1,'A',2012,'A3');
Dans B, j'ai les lignes (1,'A',2010,'B1'); (1,'A',2011,'B2');
je dois afficher les lignes
1 'A' 2010 'A1' 'B1'
1 'A' 2011 'A2' 'B2'
1 'A' 2012 'A1'
voila j'espère que j'ai été plus clair
merci
Hors ligne
Pas tout compris non plus, Je vois pas trop ce que tu veux dire par jointure externe partielle.
Mais pour affiché A même si B n'exite pas tu utilise un "left outer join"
select A.*, B.maColonneSpecifiqueB from A left outer join on A.id = B.id and A.activite = B.activite and A.annee = b.annee
Donc en fait quand tu parle d'update c'est pas pour envoyé un update à la base de donnée?
Dernière modification par Van (19-04-2013 09:00:11)
Hors ligne
non c'est de l'affichage à partir des infos des 2 tables
si jutilise select A.*, B.maColonneSpecifiqueB from A left outer join on A.id = B.ib and A.activite = B.activite and A.annee = b.annee
tu veux dire que si il y a des lignes 2012 dans A qui ne sont pas dans B je les verrai quand même ?
regarde mon exemple ..... je dois afficher la valeur A3 pour 2012 meme si il y a pas de valeurs dans B pour la meme année
Hors ligne
ok, c'est quoi la base de données ?
Hors ligne
sybase 15
Hors ligne
ok en oracle tu aurais pu faire un select dans le select (en fait je ne sais pas si ça existe en sybase 15)
la solution donnée par van marchera puisqu'il s'agit d'une jointure externe, ça affichera les lignes de A même si il n'y a rien dans B
Hors ligne
merci
je viens de tester et ca semble marcher
c super
quelle est l'équivalence de ce left outer join en symbole ? c'est pas le *= je l'ai essayé ca et ca marchait pas
Hors ligne
Le left outer join signifie qu'il prendra toute les ligne de A qui correspondent à ta requête et inclus s'il y en a les données de B .
Pour le coup comme il n'y a pas de where dans l'exemple que je t'ai mis il va prendre toute ta table A et y mettra ta donnée spécifique B là ou il y en a.
Right outer join c'est l'inverse il prend tout ce qu'il trouve pour B etc...
Pour ce qui est de ce que tu appel symbole je vois pas.
Dernière modification par Van (19-04-2013 09:49:49)
Hors ligne
les *= et =* permettent de faire des jointures externes dans les clauses du where, en Oracle en tout cas
NB : n'oublie pas d'ajouter [RESOLU] dans le titre en éditant le premier message.
Hors ligne
pour info je suis tombé sur cette récap des différents types de jointures sql
Hors ligne
Les cas suivant je connaissais pas.
select <select_list> from A left join B on A.key = b.key where b.key is null
Je passais par une requête comme ça
select <select_list> from A where not exists (select 'x' from B where A.key = B.key )
Bon niveau plan d'accès et temps de réponse c'est le même dans le cas que j'ai testé mais c'est bon pour la culture perso (et au cas ou je tombe dessus en allant sur du code existant)
Et un petit rappel sur les full outer ça fait pas de mal. Merci xlat
Dernière modification par Van (19-04-2013 13:36:47)
Hors ligne