Bonjour,
Je fais suite à un sujet évoqué cet été sur le forum officiel de l'éditeur, qui mettait en évidence le problème suivant sur les jointures externes en SQL, pour lequel il n'y a pas aujourd'hui de solution.
En gros, le problème est le suivant :
Hyperfile ne fait pas la différence entre la syntaxe :
et la syntaxe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from A LEFT OUTER JOIN B on A.id=B.id WHERE B.lib=test
Hyperfile interprète la 2ème requête comme la première, alors que ce n'est pourtant pas la même chose en SQL !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from A LEFT OUTER JOIN B on (a.id=B.id AND B.lib=test)
Dans la 2ème requête, la condition fait partie de la jointure : si elle n'est pas respectée, comme il s'agit d'une jointure externe, tous les enregistrements de la table A doivent néanmoins être ramenés.
Or Hyperfile l'applique comme une clause WHERE et ramène uniquement les enr. de A auxquels correspond un enr. de B avec B.lib = 'test'.
Je considère ce problème comme très pénalisant, car il m'oblige à utiliser plusieurs requêtes et du code pour arriver au résultat voulu, alors que cette requête fonctionne très bien avec d'autres bases SQL.
Par exemple (exemple fictif), si je veux ramener, par une requete SQL, la liste de tous les clients, et pour les clients qui ont une commande en cours (condition sur la table commande), afficher les informations de la commande : je ne peux pas le faire en une requete SQL avec Hyperfile.
J'ai transmis ce pb au support technique qui l'a enregistré en tant que "suggestion", sans qu'il y ait de correction à ce jour.
D'après un autre développeur, ce pb aurait été enregistré le 8 juillet 2009 sous le n°62273
Afin de mettre en évidence ce pb, j'ai réalisé un petit projet WD15 que j'ai mis en ligne :
http://www.covelys.fr/maj/test_jointure_externe.zip
Ce projet permet d'effectuer différents tests avec HF Classic, permet également de se connecter à une base PosgreSQL (connue pour son très bon respect de la norme SQL) pour comparer les résultats avec HF Classic. Ce qui permet de constater que les résultats, pour une même requête, sont très différents.
Si vous êtes concernés/intéressés par ce pb, merci de tester le projet et de faire part de vos remarques.
Je serai également intéressé de savoir comment vous contournez cette limitation de Hyperfile.
Cdlt, Arnaud Benhamdine.
Partager