|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Chris Développeur Web Inscription : mai 2010 Messages : 225 ![]() |
Bonjour,
j'ai une table domain(id,nom,parent) avec parent=id. Je souhaite faire une requête récursive pour récupérer les enfant d'un id précis. Avec oracle on avait connect by prior. En faisant des recherches je suis tombé sur with recursive. J'ai fait un essaye: Code :
ERROR: syntax error at or near "WITH" at character 1 LINE 1: WITH recursive ENFANT(nom,id) as est ce que ma requête est fausse ou il y a un autre probléme? merci d'avance pour toute précision. ps: version postgresql 8.4.2 |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : octobre 2008 Messages : 1 505 ![]() |
Vu le message d'erreur ça ne semble pas être la version 8.4 mais une version antérieure qui ne supporte pas ce type de requête.
Pour être sûr, exécuter |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Chris Développeur Web Inscription : mai 2010 Messages : 225 ![]() |
Bonjour, et merci pour avoir jeter un œil a mon probléme.
Effectivement la version de postgresql n'est pas celle que je pensais. |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Chris Développeur Web Inscription : mai 2010 Messages : 225 ![]() |
Bonjour,
A présent ma version de postgres est la bonne pour utilise with recursive. je viens de lancer la requête mais cela doit bien faire 5minutes quelle tourne. est ce normal? combien de temps une requête récursive mets pour s'exécuter? [edit] la requete vient de se finir par ce message ERROR: write failed [/edit] merci d'avance. |
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Votre requête compte de nombreuses erreurs !
1) id est-il numérique ? Si oui, alors pourquoi le comparer à une chaine de caractères ??? id = '33' SQL est un langage typé et un nombre ne s'exprime pas sous la forme d'une chaine de caractères 2) dans la requête d'itération, la clause SELECT comporte les colonnes nom et id mais de quelles tables viennent-ils ? 3) vous faites des produits cartésiens, pas de jointures. Une jointure s'exprime dans une clause JOIN avec un prédicat de jointure ON ! Bref, apprenez le langage SQL. Mon site web, comme mon livre, peuvent vous y aider. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#6 | ||
|
Membre habitué
![]() Chris Développeur Web Inscription : mai 2010 Messages : 225 ![]() |
[QUOTE=SQLpro;5908288]Votre requête compte de nombreuses erreurs !
1) id est-il numérique ? Si oui, alors pourquoi le comparer à une chaine de caractères ??? id = '33' SQL est un langage typé et un nombre ne s'exprime pas sous la forme d'une chaine de caractères id un varchar donc entre cote fonctionne 2) dans la requête d'itération, la clause SELECT comporte les colonnes nom et id mais de quelles tables viennent-ils ? effectivement sur ce point j'ai fait une erreur mais je n'avais jamais fait de requête récursive avec postgresql 3) vous faites des produits cartésiens, pas de jointures. Une jointure s'exprime dans une clause JOIN avec un prédicat de jointure ON ! J'ai appris le sql en faisant des jointure comme cela. la requete suivante fonctionne trés bien avec un where: Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com