OVH Cloud OVH Cloud

SQL et HF7

2 réponses
Avatar
sebNews
Bonjour,

J'ai beaucoup de mal avec la syntaxe SQL et HF7 avec les jointures

J'ai une Table CLIENTS et CAT ( code libelle ) Un clients peut avoir
une catégorie ( bon , pas bon etc )

Liste des clients avec la catégorie : Pas de problèmes:

SELECT clients.code_cli, clients.Nom, clients.adresse1, clients.adresse2,
clients.date_fin_rth, cat.libelle
FROM clients LEFT JOIN cat ON cat.code=clients.cat

Par contre j'ai une seconde table liée à Client : CAT2( code, libelle ) du
même type

Et la je coince , impossible de faire ma reqêtte ( avec double jointure)
( je sais faire avec des clauses Where et And mais )


SELECT clients.code_cli, clients.Nom, clients.adresse1, clients.adresse2,
clients.date_fin_rth, cat.libelle, cat2.libelle
FROM clients LEFT JOIN cat2 ON cat2.code=clients.cat2
LEFT JOIN cat ON cat.code=clients.cat

Cette syntaxe ne fonctionne pas, j'ai essayé de plusieurs eplacement de
parenthèses mais
je n'y arive pas.

Qui peut me donner un coup de main pour ma syntaxe de jointures ?

******
Sinon avec clause Where cela fonctionne

SELECT Clients.Nom AS Nom,
Clients.prenom AS prenom,
cat.libelle AS libelle1,
cat2.libelle AS libelle2,
Clients.ville AS ville
FROM cat, cat2, Clients
WHERE Clients.cat = cat.code
AND Clients.cat2= cat2.code

2 réponses

Avatar
mat
sebNews wrote:
SELECT clients.code_cli, clients.Nom, clients.adresse1,
clients.adresse2, clients.date_fin_rth, cat.libelle, cat2.libelle
FROM clients LEFT JOIN cat2 ON cat2.code=clients.cat2 LEFT JOIN
cat ON cat.code=clients.cat

Cette syntaxe ne fonctionne pas, j'ai essayé de plusieurs eplacement
de parenthèses mais je n'y arive pas.

Qui peut me donner un coup de main pour ma syntaxe de jointures ?

****** Sinon avec clause Where cela fonctionne

SELECT Clients.Nom AS Nom, Clients.prenom AS prenom, cat.libelle AS
libelle1, cat2.libelle AS libelle2, Clients.ville AS ville FROM cat,
cat2, Clients WHERE Clients.cat = cat.code AND Clients.cat2 > cat2.code




Il y a plusieurs possibilités (voir l'aide pour la syntaxe).

SELECT clients.code_cli, clients.Nom, clients.adresse1, clients.adresse2,
clients.date_fin_rth, cat.libelle, cat2.libelle
FROM clients LEFT JOIN cat2 ON cat2.code=clients.cat2,
clients LEFT JOIN cat ON cat.code=clients.cat

ou bien

SELECT clients.code_cli, clients.Nom, clients.adresse1, clients.adresse2,
clients.date_fin_rth, cat.libelle, cat2.libelle
FROM clients LEFT JOIN cat2 ON cat2.code=clients.cat2,
cat RIGHT JOIN clients ON cat.code=clients.cat


devraient marcher.
Avatar
mat
mat wrote:
Il y a plusieurs possibilités (voir l'aide pour la syntaxe).

SELECT clients.code_cli, clients.Nom, clients.adresse1,
clients.adresse2, clients.date_fin_rth, cat.libelle, cat2.libelle
FROM clients LEFT JOIN cat2 ON cat2.code=clients.cat2, clients LEFT
JOIN cat ON cat.code=clients.cat

ou bien

SELECT clients.code_cli, clients.Nom, clients.adresse1,
clients.adresse2, clients.date_fin_rth, cat.libelle, cat2.libelle
FROM clients LEFT JOIN cat2 ON cat2.code=clients.cat2, cat RIGHT
JOIN clients ON cat.code=clients.cat




ouuuf... faut plutôt oublier ce conseil :-)

Je n'ai pas fait assez attention:
LEFT et RIGHT ne sont utilisés que dans des OUTER JOINS.
Pour un left join utiliser INNER JOIN.

Conclusion:

SELECT clients.code_cli, clients.Nom, clients.adresse1,
clients.adresse2, clients.date_fin_rth, cat.libelle, cat2.libelle
FROM clients INNER JOIN cat2 ON cat2.code=clients.cat2,
clients INNER JOIN cat ON cat.code=clients.cat