PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Question requête SQL (inner join)
Question requête SQL (inner join)
Started by p.poinsignon, Apr., 20 2006 8:02 AM - 7 replies
Posted on April, 20 2006 - 8:02 AM
bonjour à tous une petite question, j'essaye d'exécuter une requête avec plusieurs inner join à la suite via HExécuteRequêteSQL, mais j'ai un message qui me dit qu'il ne veut pas du second inner join?? (ce qui se fait très bien sur un as400 par exemple). En testant chacun d'eux cela marche.

Avez-vous une idée svp?? merci!!!!!!!!

voici ma requête:

SELECT MATERIEL.IDENTIFIANT_INT, MATERIEL.NOMNETBIOS, FAMILLE.NOM,
MATERIEL.DESIGNATION, UTILISATEUR.NOM
FROM MATERIEL
INNER JOIN FAMILLE
ON FAMILLE.FAMCLEUNIK=MATERIEL.FAMCLEUNIK
INNER JOIN UTILISATEUR
ON UTILISATEUR.UTILCLEUNIK=MATERIEL.UTILCLEUNIK
Posted on April, 20 2006 - 10:13 AM
Dans son message précédent, Lepatou a écrit :
bonjour à tous une petite question, j'essaye d'exécuter une requête avec
plusieurs inner join à la suite via HExécuteRequêteSQL, mais j'ai un message
qui me dit qu'il ne veut pas du second inner join?? (ce qui se fait très bien
sur un as400 par exemple). En testant chacun d'eux cela marche.

Avez-vous une idée svp?? merci!!!!!!!!

voici ma requête:

SELECT MATERIEL.IDENTIFIANT_INT, MATERIEL.NOMNETBIOS, FAMILLE.NOM,
MATERIEL.DESIGNATION, UTILISATEUR.NOM
FROM MATERIEL
INNER JOIN FAMILLE
ON FAMILLE.FAMCLEUNIK=MATERIEL.FAMCLEUNIK
INNER JOIN UTILISATEUR
ON UTILISATEUR.UTILCLEUNIK=MATERIEL.UTILCLEUNIK


essayez comme ceci :

SELECT MATERIEL.IDENTIFIANT_INT, MATERIEL.NOMNETBIOS, FAMILLE.NOM,
MATERIEL.DESIGNATION, UTILISATEUR.NOM
FROM MATERIEL
INNER JOIN FAMILLE
ON FAMILLE.FAMCLEUNIK=MATERIEL.FAMCLEUNIK
MATERIEL INNER JOIN UTILISATEUR
ON UTILISATEUR.UTILCLEUNIK=MATERIEL.UTILCLEUNIK

--
Cordialement JeAn-PhI
Posted on April, 20 2006 - 10:14 AM
Bonjour

la syntaxe SQL de WINDEV est particuliere pour faire
2 jointures dans une requete

voici la syntaxe que j'utilise

Select col1 from table1 as table1
join table2 as table2 on table1.code = table2.code,
table1 as table1
join table3 as table3 in table1.code1 = table3.code1

Moi je suis à la recherche de la syntaxe de case ... when ... then ...
mais appararement pas supporté par windev

Bon dev

hervé
Posted on April, 20 2006 - 10:52 AM
Est ce que tu utilises une base tierce ou l hyperfile ?
Parce que si c est une base tierce (style SQL server, oracle...),
execute le HexecuteRequeteSQL en mode hRequeteSansCorrection
(en precisant la connexion).

Dans ce cas tu peux mettre exactement le meme code SQL que sur
ta base tierce (as400...).

Voila,
Damien.
Posted on April, 21 2006 - 1:34 AM
Pour info 1: je lance les requêtes juste sur des bases hyperfile.

Pour info 2: la solution ci-dessous de Jean-Phy ne fonctionne pas non plus, il me dit que 'matériel' est inattendu (entre les deux inner join)

SELECT MATERIEL.IDENTIFIANT_INT, MATERIEL.NOMNETBIOS, FAMILLE.NOM,
MATERIEL.DESIGNATION, UTILISATEUR.NOM
FROM MATERIEL
INNER JOIN FAMILLE
ON FAMILLE.FAMCLEUNIK=MATERIEL.FAMCLEUNIK
MATERIEL INNER JOIN UTILISATEUR
ON UTILISATEUR.UTILCLEUNIK=MATERIEL.UTILCLEUNIK
Posted on April, 21 2006 - 11:03 AM
Dans son message, Lepatou racontait :

Pour info 1: je lance les requêtes juste sur des bases hyperfile.

Pour info 2: la solution ci-dessous de Jean-Phy ne fonctionne pas non plus, il me dit que 'matériel' est inattendu (entre les deux inner join)

SELECT MATERIEL.IDENTIFIANT_INT, MATERIEL.NOMNETBIOS, FAMILLE.NOM,
MATERIEL.DESIGNATION, UTILISATEUR.NOM
FROM MATERIEL
INNER JOIN FAMILLE
ON FAMILLE.FAMCLEUNIK=MATERIEL.FAMCLEUNIK
MATERIEL INNER JOIN UTILISATEUR
ON UTILISATEUR.UTILCLEUNIK=MATERIEL.UTILCLEUNIK


Il manque une virgule entre
ON FAMILLE.FAMCLEUNIK=MATERIEL.FAMCLEUNIK
et
MATERIEL INNER JOIN UTILISATEUR

Bon dev
--
Lionel

mailto:lionel.breil*NOSPAM*@gmail.com
(retirer *NOSPAM* pour m'écrire)
Posted on April, 21 2006 - 6:04 PM
Après mûre réflexion, Lepatou a écrit :
Pour info 1: je lance les requêtes juste sur des bases hyperfile.

Pour info 2: la solution ci-dessous de Jean-Phy ne fonctionne pas non plus,
il me dit que 'matériel' est inattendu (entre les deux inner join)

SELECT MATERIEL.IDENTIFIANT_INT, MATERIEL.NOMNETBIOS, FAMILLE.NOM,
MATERIEL.DESIGNATION, UTILISATEUR.NOM
FROM MATERIEL
INNER JOIN FAMILLE
ON FAMILLE.FAMCLEUNIK=MATERIEL.FAMCLEUNIK
MATERIEL INNER JOIN UTILISATEUR
ON UTILISATEUR.UTILCLEUNIK=MATERIEL.UTILCLEUNIK


un petit complément un inner join et équivalent à un WHERE
MonFichier.MaClé = MonAutreFichier.MaCléEtrangère après c'est le moteur
SQL qui fait la différence en terme de rapidité. logiquement le inner
join doit être plus rapide mais je ne pense pas que le moteur SQL
WinDev fasse la différence

--
Cordialement JeAn-PhI
Posted on April, 22 2006 - 8:17 PM
Après avoir fait de nombreux tests sur des accès Hyperfile, je peux certifier que la syntaxe INNER JOIN est plus rapide que la syntaxe WHERE.., avec les mêmes arguments.
Le gain n'est pas énorme mais il existe.

Je n'ai pas testé sur d'autres accès.

Cordialement, Arnaud.