Jointures externe et interne sous éditeur de requête
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
Bonjour,

Soit 3 fichiers HYPERFILE avec les liaisons suivantes :
PERSONNE (0,1) <-> (0,n) TYPEPERSONNE (1,1) <-> (0,n) FAMPERSONNE
Les relations sont définies sur des rubriques alpha.
Je veux obtenir la liste de toutes les personnes, qu’elles aient ou non un type de personne TYPEPER et, SI elles ont un TYPEPER, afficher le libellé de famille de TYPEPER correspondant.

Lorsque j’édite une requête avec l’éditeur sur ces trois fichiers, je me retrouve, en cochant "afficher les personnes qui n'ont pas de TYPEPER), avec les jointures réalisées de la manière suivante :
SELECT PERSONNE.NOM, PERSONNE.TYPEPER, TYPEPERSONNE.TYPEPER, TYPEPERSONNE.FAMCODE, FAMPERSONNE.FAMCODE, FAMPERSONNE.LIBELLE
FROM PERSONNE LEFT OUTER JOIN TYPEPERSONNE 
ON PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER, 
TYPEPERSONNE INNER JOIN TYPEFAMPERSONNE 
ON TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
 ORDER BY PERSONNE.NOM ASC

Normalement, cette requête devrait être correcte, non ??? puisque c'est l'éditeur qui l'a écrit.

Le problème, c’est que j’ai des enregistrements qui disparaissent, et pas toujours les mêmes.
J’ai 51 enregistrements dans mon fichier PERSONNE. Sur ceux-ci, j’en ai 25 qui ont une rubrique PERSONNE.TYPEPER = "" et 26 qui ont une valeur.
Or les 4 enregistrements qui disparaissent ont une valeur correcte pour cette rubrique, valeur qui n'empêche pas l'affichage d'autres enregistrements.
J'ai bien vérifié dans le fichier TYPEPERSONNE que tous les enregistrements ont bien une valeur FAMCODE.
Et dans le fichier FAMPERSONNE que ces valeurs existent bien.
Si je supprime la 2ème jointure avec le fichier FAMPERSONNE, tout est OK.
Dès que je la rajoute, rien ne va plus.

J'ai fait une synchronisation du projet avec l'analyse, la mise à niveau du projet, et j'ai également demandé une ré indexation des fichiers : rien n'y fait.

J'ai repassé tous mes enregistrements en modification. Après cela, les 4 enregistrements qui avaient disparu ont réapparu, et 4 nouveaux ont disparu !!!

Cela fait 2 jours que je suis dessus et je m'arrache les cheveux.

Par ailleurs, pour les lignes qui n'ont pas de valeur TYPEPER, j'ai toujours la valeur FAMPERSONNE.LIBELLE du premier enregistrement de ce fichier, alors que je devrais ne rien avoir.

Faut-il prendre des précautions particulières pour faire des relations sur des rubriques "caractères" ? J'ai regardé dans la description des rubriques de fichier (style gestion des null) mais je n'ai rien trouvé.

J'ai lu sur des forums qu'il y avait des problèmes pour faire des jointures externes multiples avec les anciennes versions ?
Les problèmes ont-il perduré en version 8 ?
Ne maîtrisant pas vraiment SQL, j'espérais pouvoir compter sur l'éditeur mais là, je ne sais plus quoi faire.

Merci à celui qui aura une idée pour m'éclairer.


Contribution le : 07/03/2005 19:51
Créer un fichier PDF de la contribution Imprimer


Re: Jointures externe et interne sous éditeur de requête
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
SELECT PERSONNE.NOM, PERSONNE.TYPEPER, TYPEPERSONNE.TYPEPER, TYPEPERSONNE.FAMCODE, FAMPERSONNE.FAMCODE, FAMPERSONNE.LIBELLE

FROM TYPEPERSONNE RIGHT OUTER JOIN PERSONNE  
ON PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER, 
INNER JOIN TYPEFAMPERSONNE 
ON TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
 ORDER BY PERSONNE.NOM ASC


Je ne connait plus la syntaxe exacte en hyperfile, mais est ce que ceci passe mieux ?

Contribution le : 08/03/2005 08:40
Créer un fichier PDF de la contribution Imprimer


Re: Jointures externe et interne sous éditeur de requête
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
Ou il reste cette solution :

(
SELECT PERSONNE.NOM, PERSONNE.TYPEPER, TYPEPERSONNE.TYPEPER, TYPEPERSONNE.FAMCODE, FAMPERSONNE.FAMCODE, FAMPERSONNE.LIBELLE
FROM PERSONNE,TYPEPERSONNE,TYPEFAMPERSONNE
WHERE PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER, 
AND TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
)
UNION
(
SELECT PERSONNE.NOM, PERSONNE.TYPEPER, TYPEPERSONNE.TYPEPER, TYPEPERSONNE.FAMCODE, FAMPERSONNE.FAMCODE, FAMPERSONNE.LIBELLE
FROM PERSONNE
WHERE PERSONNE.IDPERSONNE NOT IN (
SELECT PERSONNE.IDPERSONNE FROM PERSONNE,TYPEPERSONNE,TYPEFAMPERSONNE
WHERE PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER, 
AND TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
)
)
ORDER BY PERSONNE.NOM ASC


Je ne dirais pas que windev ne c'est pas faire des jointures externes, mais j'ai moi aussi galérer à l'époque a faire marcher mes requetes sur hyperfile.
Depuis je suis passez sous MySQL ...



Pour tout ceux qui se pose des questions sur le langage SQL
-----------> http://sqlpro.developpez.com/

Contribution le : 08/03/2005 08:45
Créer un fichier PDF de la contribution Imprimer


Re: Jointures externe et interne sous éditeur de requête
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
Bonjour et merci pour ces deux réponses

Malheureusement, aucune de ces deux syntaxes ne fonctionnent pas.
Je les ai testé sous WPMAP, option - Requête SQL - ce que je fais toujours pour vérifier si cela va passer et voir le résultat de ce que me donnera une requête écrite dans le code - et j'ai des refus de WD :

1) Mot "INNER" inattendu
2) l'objet Condition SQL n'a pas été trouvé.

J'aurais aimé arriver à une solution avec l'Editeur de requête, car cela me semble plus pratique à maintenir, et je suis étonnée qu'il ait si peu d'explications et de commentaires là-dessus sur les forums que j'ai visités.
Est-ce la majorité des développeurs ne s'en servent pas ?

Par ailleurs, les explications données sur le site de developpez.com sont super, mais cela ne signifie pas qu'elles sont acceptées par WD.

Je suis débutante et jusqu'à présent, les requêtes que j'ai écrites en code fonctionnent bien, mais j'ai souvent des problèmes pour celles que je veux définir dans les requêtes enregistrées, car je les utilise depuis plusieurs endroits.

Est-ce anormal que d'exploiter une base de données avec des jointures externes et internes simultanément et est-ce les fonctions intégrées de WD et HF présentent des lacunes à ce sujet ?

Ou bien est-ce moi qui fais des bêtises, ce qui est tout à fait probable ?

Toutes autres idées seraient les bienvenues.

Contribution le : 08/03/2005 12:46
Créer un fichier PDF de la contribution Imprimer


Re: Jointures externe et interne sous éditeur de requête
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
Hyperfile sait faire des jointures externes, mais c'est juste qu'il faut perseverer un peu pour que ca fonctionne correctement.


Pour la premiere syntaxe faire comme ceci ca doit passer:
Citation :

SELECT PERSONNE.NOM, PERSONNE.TYPEPER, TYPEPERSONNE.TYPEPER, TYPEPERSONNE.FAMCODE, FAMPERSONNE.FAMCODE, FAMPERSONNE.LIBELLE
FROM TYPEPERSONNE RIGHT OUTER JOIN PERSONNE
ON PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER,
TYPEPERSONNE INNER JOIN TYPEFAMPERSONNE
ON TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
ORDER BY PERSONNE.NOM ASC


Pour la deuxieme c'est une des méthodes que j'utilisait devant la difficulté a faire des jointures avec hyperfile, donc ca doit marcher:
test comme ca :

Citation :

SELECT PERSONNE.NOM, PERSONNE.TYPEPER, TYPEPERSONNE.TYPEPER, TYPEPERSONNE.FAMCODE, FAMPERSONNE.FAMCODE, FAMPERSONNE.LIBELLE
FROM PERSONNE,TYPEPERSONNE,TYPEFAMPERSONNE
WHERE PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER,
AND TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
UNION
SELECT PERSONNE.NOM, PERSONNE.TYPEPER, TYPEPERSONNE.TYPEPER, TYPEPERSONNE.FAMCODE, FAMPERSONNE.FAMCODE, FAMPERSONNE.LIBELLE
FROM PERSONNE
WHERE PERSONNE.IDPERSONNE NOT IN (
SELECT PERSONNE.IDPERSONNE FROM PERSONNE,TYPEPERSONNE,TYPEFAMPERSONNE
WHERE PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER,
AND TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
)
ORDER BY PERSONNE.NOM ASC




Contribution le : 08/03/2005 15:06
Créer un fichier PDF de la contribution Imprimer


Re: Jointures externe et interne sous éditeur de requête
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
Merci KPiTN,

Après quelques adaptations (supprimer dans la 2ème partie les colonnes non présentes) j'ai pu faire fonctionner la requête UNION.

Malheureusement, je reste sur ma question : d'autres personnes arrivent-elles à réaliser des requêtes de ce type avec l'éditeur de requête sur des fichiers HF pour qu'elles rendent le résultat correct ?

Je me suis un moment demandé si, après plusieurs modifications, des paramètres erronés ne restaient pas stockées dans la structure du fichier requête après qu'ils aient été détruits.


Contribution le : 09/03/2005 13:04
Créer un fichier PDF de la contribution Imprimer


Re: Jointures externe et interne sous éditeur de requête
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
Autant pour moi la syntaxe correcte doit etre celle la :

SELECT PERSONNE.NOM, PERSONNE.TYPEPER, TYPEPERSONNE.TYPEPER, TYPEPERSONNE.FAMCODE, FAMPERSONNE.FAMCODE, FAMPERSONNE.LIBELLE
FROM PERSONNE,TYPEPERSONNE,TYPEFAMPERSONNE
WHERE PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER, 
AND TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
UNION
SELECT PERSONNE.NOM, PERSONNE.TYPEPER, '' as TYPEPER, '' as FAMCODE, '' as FAMCODE, '' as LIBELLE
FROM PERSONNE
WHERE PERSONNE.IDPERSONNE NOT IN (
SELECT PERSONNE.IDPERSONNE FROM PERSONNE,TYPEPERSONNE,TYPEFAMPERSONNE
WHERE PERSONNE.TYPEPER = TYPEPERSONNE.TYPEPER, 
AND TYPEPERSONNE.FAMCODE = TYPEFAMPERSONNE.FAMCODE
)
ORDER BY PERSONNE.NOM ASC


Personnellement je ne suis pas un fan des choses prémachés, car souvent les performances ne sont pas au rendez vous (des fois mêmes ca ne marche pas :) )
Une requete meme la plus petite doit etre au maximum optimisé.
Je n'ai jamais utilisé l'editeur de requetes autre qu'a la main, donc je ne peut pas te dire.
De meme que je n'utilise pas les tables fichier, toujours les tables mémoires.





Contribution le : 09/03/2005 14:00
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2