Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 19-04-2013 08:20:04

remypb  
Membre Geek
Date d'inscription: 19-04-2013
Messages: 65
Pépites: 262
Banque: 0

[RESOLU] Update entre datawindows

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

 

#2 19-04-2013 08:30:26

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Update entre datawindows

Bonjour,

J'ai pas tout compris...
C'est quelle info que tu dois updater ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 19-04-2013 08:42:45

remypb  
Membre Geek
Date d'inscription: 19-04-2013
Messages: 65
Pépites: 262
Banque: 0

Re: [RESOLU] Update entre datawindows

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

 

#4 19-04-2013 08:52:46

Van  
Bienfaiteur du site
Award: bf
Lieu: mouvaux
Date d'inscription: 19-03-2013
Messages: 125
Pépites: 673
Banque: 41

Re: [RESOLU] Update entre datawindows

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)


Tant que ça bouge c'est pas mort, dans le doute frappe encore!
Ni dieu ni maître, sauf maître Kanter!

Hors ligne

 

#5 19-04-2013 09:00:52

remypb  
Membre Geek
Date d'inscription: 19-04-2013
Messages: 65
Pépites: 262
Banque: 0

Re: [RESOLU] Update entre datawindows

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

 

#6 19-04-2013 09:03:09

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Update entre datawindows

ok, c'est quoi la base de données ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#7 19-04-2013 09:05:47

remypb  
Membre Geek
Date d'inscription: 19-04-2013
Messages: 65
Pépites: 262
Banque: 0

Re: [RESOLU] Update entre datawindows

sybase 15

Hors ligne

 

#8 19-04-2013 09:08:50

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Update entre datawindows

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


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#9 19-04-2013 09:28:56

remypb  
Membre Geek
Date d'inscription: 19-04-2013
Messages: 65
Pépites: 262
Banque: 0

Re: [RESOLU] Update entre datawindows

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

 

#10 19-04-2013 09:48:36

Van  
Bienfaiteur du site
Award: bf
Lieu: mouvaux
Date d'inscription: 19-03-2013
Messages: 125
Pépites: 673
Banque: 41

Re: [RESOLU] Update entre datawindows

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)


Tant que ça bouge c'est pas mort, dans le doute frappe encore!
Ni dieu ni maître, sauf maître Kanter!

Hors ligne

 

#11 19-04-2013 09:58:07

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Update entre datawindows

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.


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#12 19-04-2013 12:18:07

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: [RESOLU] Update entre datawindows

pour info je suis tombé sur cette récap des différents types de jointures sql

http://savage.net.au/assets/images/web-site/sql.joins.jpg


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#13 19-04-2013 13:03:59

Van  
Bienfaiteur du site
Award: bf
Lieu: mouvaux
Date d'inscription: 19-03-2013
Messages: 125
Pépites: 673
Banque: 41

Re: [RESOLU] Update entre datawindows

Les cas suivant je connaissais pas.

Code: sql

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

Code: sql

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)


Tant que ça bouge c'est pas mort, dans le doute frappe encore!
Ni dieu ni maître, sauf maître Kanter!

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22