Précédent   Forum des professionnels en informatique > Environnements de développement > WinDev > HyperFileSQL
HyperFileSQL HyperFileSQL est un système de gestion de base de données relationnel exploité par les logiciels WinDev, WebDev et WinDev Mobile.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/10/2011, 15h06   #1
R&B
Membre habitué
 
Homme Romuald Besset
Développeur informatique
Inscription : mars 2005
Messages : 108
Détails du profil
Informations personnelles :
Nom : Homme Romuald Besset
Âge : 39
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : mars 2005
Messages : 108
Points : 140
Points : 140
Par défaut SQL OUTER / UNION

Bonjour

J'ai deux fichier A et B pour lesquels je veux les lignes communes et non communes avec A.DOC="valA" et B.DOC="valB" pour les rubriques A.CLE B.QTE, B.CLE et B.QTE

Le but étant d'avoir A.CLE, A.QTE,B.CLE, B.QTE avec tantôt un coté ou l'autre vide pour les lignes non communes et la quantité de chaque fichier POUR A.CLE=B.CLE.

Exemple
A.DOC;A.CLE;A.QTE
D1;C1;9
D1;C2;8
D1;C3;4

B.DOC;B.CLE;B.QTE
D2;C1;10
D2;C3;4
D2;C4;8

J'aimerai obtenir quand on donne A.DOC="D1" et B.DOC="D2" :
A.CLE;A.QTE;B.CLE;B.QTE
C1;9;C1;10
C2;8;null;null
C3;4;C3;4
null;null;C4;8


Nous avons testé en vain les clause FULL OUTER JOIN ou UNION comme suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
  A.CLE AS A_CLE,  
  A.QTE AS A_QTE,  
  B.CLE AS B_CLE,  
  B.QTE AS B_QTE
FROM 
  A FULL OUTER JOIN B ON B.CLE  =  A.CLE
WHERE 
  (
  A.DOC = 'D1'
  AND  B.DOC = 'D2'
)
-> on obtient :
A.CLE;A.QTE;B.CLE;B.QTE
C1;9;C1;10
C3;4;C3;4

Avec union on a fait :
Code :
1
2
3
4
 
SELECT A.CLE,  A.QTE FROM A WHERE A.DOC = 'D1'
UNION
SELECT B.CLE,  B.QTE FROM B WHERE B.DOC = 'D2'
-> on obtient :
CLE;QTE
C1;10
C2;8
C3;4
C4;8

Là il nous manque les quantité ou une colonne 'vide' dans chaque requête.
Merci d'avance.
__________________
++ R&B
R&B est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 23h23   #2
Membre chevronné
 
Avatar de miripesage
 
Homme Said
pesage electronique
Inscription : novembre 2009
Messages : 482
Détails du profil
Informations personnelles :
Nom : Homme Said
Localisation : Algérie

Informations professionnelles :
Activité : pesage electronique
Secteur : Industrie

Informations forums :
Inscription : novembre 2009
Messages : 482
Points : 643
Points : 643
Bonjour, si le moteur supporte l'UNION JOIN :
Code :
1
2
3
SELECT A.CLE,  A.QTE FROM A WHERE A.DOC = 'D1'
UNION JOIN
SELECT B.CLE,  B.QTE FROM B WHERE B.DOC = 'D2'
miripesage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2011, 00h16   #3
Membre confirmé
 
Homme Arnaud Benhamdine
Directeur technique
Inscription : octobre 2004
Messages : 157
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Benhamdine
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2004
Messages : 157
Points : 263
Points : 263
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
SELECT 
 *
FROM 
  A LEFT OUTER JOIN (SELECT * FROM B WHERE B.DOC = 'D2') ON A.CLE  =  B.CLE
WHERE 
  A.DOC = 'D1'
 
UNION
 
SELECT 
 *
FROM 
  B LEFT OUTER JOIN (SELECT * FROM A WHERE A.DOC = 'D1') ON B.CLE  =  A.CLE
WHERE 
B.DOC = 'D2'
Obligé de faire des sous-requete car HF ne sait pas gérer les conditions dans la clause ON qui porte sur la table externe (bug signalé depuis la version 14, réglé en v16 en C/S mais pas en HF Classic).

Citation:
Envoyé par R&B Voir le message
Bonjour

J'ai deux fichier A et B pour lesquels je veux les lignes communes et non communes avec A.DOC="valA" et B.DOC="valB" pour les rubriques A.CLE B.QTE, B.CLE et B.QTE

Le but étant d'avoir A.CLE, A.QTE,B.CLE, B.QTE avec tantôt un coté ou l'autre vide pour les lignes non communes et la quantité de chaque fichier POUR A.CLE=B.CLE.

Exemple
A.DOC;A.CLE;A.QTE
D1;C1;9
D1;C2;8
D1;C3;4

B.DOC;B.CLE;B.QTE
D2;C1;10
D2;C3;4
D2;C4;8

J'aimerai obtenir quand on donne A.DOC="D1" et B.DOC="D2" :
A.CLE;A.QTE;B.CLE;B.QTE
C1;9;C1;10
C2;8;null;null
C3;4;C3;4
null;null;C4;8


Nous avons testé en vain les clause FULL OUTER JOIN ou UNION comme suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
  A.CLE AS A_CLE,  
  A.QTE AS A_QTE,  
  B.CLE AS B_CLE,  
  B.QTE AS B_QTE
FROM 
  A FULL OUTER JOIN B ON B.CLE  =  A.CLE
WHERE 
  (
  A.DOC = 'D1'
  AND  B.DOC = 'D2'
)
-> on obtient :
A.CLE;A.QTE;B.CLE;B.QTE
C1;9;C1;10
C3;4;C3;4

Avec union on a fait :
Code :
1
2
3
4
 
SELECT A.CLE,  A.QTE FROM A WHERE A.DOC = 'D1'
UNION
SELECT B.CLE,  B.QTE FROM B WHERE B.DOC = 'D2'
-> on obtient :
CLE;QTE
C1;10
C2;8
C3;4
C4;8

Là il nous manque les quantité ou une colonne 'vide' dans chaque requête.
Merci d'avance.
Arnaud B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h13.


 
 
 
 
Partenaires

Hébergement Web