|
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. |
| |
| |
| | | |
|
| | | | |
| | |
|