[Résolu] Requête récursive CTE (clause WITH)

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
jlf
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 07 févr. 2009 17:30

[Résolu] Requête récursive CTE (clause WITH)

Message par jlf »

bonjour

est il possible avec libo de créer des CTE en mode ébauche de requêtes ?

l'éditeur ne semble pas reconnaitre la clause WITH :cry:
HSQL et Firebird l'implémentent tous les deux en natif, alors je me dis que c'est peut-être intégré aussi dans le moteur libo ?

merci de votre aide
Dernière modification par jlf le 12 mars 2021 14:56, modifié 1 fois.
LibreOffice 6.3 (boulot) et 7.0.5.2 (perso) Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: requete recursive CTE

Message par jeanmimi »

Bonjour,
En HSQLDB, la clause SQL qui s'en approche est WHERE si j'ai bien compris ce que tu veux faire.
La correspondance des instructions entre HSQLDB et Firebird, du moins la version embarquée dans LibreOffice, est visible ici :
//wiki.documentfoundation.org/Documentation/HowTo/MigrateFromHSQLDB/fr
et toutes les instructions SQL dans Firebird là :
//www.firebirdsql.org/en/sql-conformance/

Compte-tenu des bogues à résoudre, Firebird est repassé en "expérimental" depuis LibO 6.4 (à lire dans la documentation de cette version)
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
jlf
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 07 févr. 2009 17:30

Re: requete recursive CTE

Message par jlf »

jeanmimi a écrit :En HSQLDB, la clause SQL qui s'en approche est WHERE si j'ai bien compris ce que tu veux faire
je n'ai pas été très clair, excuse moi

je ne connais pas HSQL mais il implémente bien les CTE sql en natif, voici un exemple de discussion sur le sujet :
//stackoverflow.com/questions/44472280/cte-based-sequence-generation-with-hsqldb

on peut remplacer souvent par du where ou des jointures, mais c'est beaucoup moins lisible et efficace

Firebird, que je connais mieux, l'implémente au moins depuis la 2.5
//www.firebirdsql.org/refdocs/langrefupd2 ... select-cte
(3ème chap "Common Table Expressions (“WITH ... AS ... SELECT”)")

donc je me disais que le moteur libo avait probablement repris ça, peut-être dans une syntaxe spécifique, mais je trouve rien et WITH n'est pas reconnu dans l'éditeur syntaxique de l'ébauche sql

en tous cas merci de tes infos

edit :
pour ceux qui connaissent mal les CTE et seraient intéressés il y a un excellent article en français de Brouard sur un site ami de celui ci :
//sqlpro.developpez.com/cours/sqlserver/cte-recursives/
@Bidouille : non, je n'ai pas vérifié s'il est déjà dans la liste des références, désolé
LibreOffice 6.3 (boulot) et 7.0.5.2 (perso) Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: requete recursive CTE

Message par Dude »

Salut,

Il est toujours possible de créer des requêtes en mode SQL direct.
https://beaussier.com/sections/viewtopic.php?f=8&t=1577 (chapitre H).
jlf a écrit :je ne connais pas HSQL mais il implémente bien les CTE sql en natif
Tout dépend de la version HSQLDB. Dans celle embarquée par OpenOffice ou ses dérivés, c'est la 1.8.
La documentation officielle montre que la clause WITH n'est pas gérée.
jlf
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 07 févr. 2009 17:30

Re: requete recursive CTE

Message par jlf »

Dude a écrit :Tout dépend de la version HSQLDB. Dans celle embarquée par OpenOffice ou ses dérivés, c'est la 1.8.
La documentation officielle montre que la clause WITH n'est pas gérée.
OK merci de l'info qui implique je suppose que les CTE ne sont pas non plus implantées sur les Firebirds intégrés, même sous une syntaxe exotique

c'est une grosse carence, vraiment ...
:x
LibreOffice 6.3 (boulot) et 7.0.5.2 (perso) Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: requete recursive CTE

Message par Dude »

jlf a écrit :c'est une grosse carence, vraiment ...
Base peut très bien s'utiliser avec un SGBD externe (exemple sous Windows avec MySQL).
Pour le HSQL, il y a la demande 121837 pour l'intégration en version 2.x (5 voix à ce jour).

Faut voter !
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: requete recursive CTE

Message par jeanmimi »

Je viens de tester les exercices 1, 2, 3 et 4 de cette page :
//sqlpro.developpez.com/cours/sqlserver/cte-recursives/
sur une Base Firebird.
Il y a bien aussi des exemples de CTE dans la partie Firebird de ce site.
Les requêtes SQL avec WITH fonctionnent correctement et affichent les résultats attendus.
Requête WITH.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
jlf
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 07 févr. 2009 17:30

Re: requete recursive CTE

Message par jlf »

jeanmimi a écrit : Les requêtes SQL avec WITH fonctionnent correctement et affichent les résultats attendus.
Requête WITH.jpg
effectivement c'est moi qui me suis mélangé les pinceaux
d'abord j'ai testé en HSQL, évidemment sans succès, puis je suis passé à Firebird suite à la remarque de Dude sur la version 1.8 mais sans tilter sur sa référence au sql direct

je viens enfin de voir grace à vos efforts :D qu'il est nécessaire, même si je ne suis pas sûr d'en comprendre la logique
bon, je suppose que ça peut en gros se résumer à : le moteur libo contient des trucs que l'analyseur syntaxique ne connait pas

en tous cas le moteur libo a bien repris les CTE de Firebird, et ça m'arrange considérablement même si les bugs Fb embarqué effraient un peu peur pour lancer une appli libo dessus en réel
merci beaucoup à vous deux
LibreOffice 6.3 (boulot) et 7.0.5.2 (perso) Windows 10