Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
934 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Limite des requête imbriqué dans la clause FROM

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Limite des requête imbriqué dans la clause FROM

n°2069983
manuman83
Posté le 14-04-2011 à 14:56:44  profilanswer
 

Bonjour à tous.
 
Avant tous, veuillez m'excuser si un sujet similaire existe, j'ai fait une recherche, mais je n'ai pas vraiment trouvé la réponse à ma question...
 
En gros je voulais savoir si il existe une limite pour la définition de la clause FROM avec des sous requête ?
 
J'ai une requête qui est correcte qui me créé Table1 et Table2 à partir de requête. Les deux requêtes qui génère Table1 et Table2, fonctionne lorsque je les exécute séparément. Mais lorsque je les utilise dans un SELECT... Ca ne passe pas. Le message d'erreur est que ma table Table1 n'existe pas.
 
A noter que les requêtes qui génère Table1 et Table2 génère elle même 2 table TableA et TableB...
 
Bref voici l'exemple :
 

Code :
  1. SELECT DISTINCT(A.Champ1), B.Champ2, B.Champ3,  A.Credit, B.Debit
  2. FROM (
  3. SELECT CumulC.sjr as Champ1, CumulC.Champ2, CumulC.Champ3, sum(CumulC.CumulCredit) as Credit
  4. FROM (
  5.  SELECT lf.sjr, lp.Champ2, lp.Champ3,
  6.  sum(montant) as CumulCredit
  7.  FROM lr, lf, ls, lp 
  8.  WHERE lr.id = lf.id
  9.  AND lf.id = ls.id
  10.  AND ls.nip = lp.nip
  11.  AND ls.module = 1
  12.  AND ls.dateC >= '20100414'
  13.  AND ls.mode IN (1,2,4,6)
  14.  GROUP BY lf.sjr, lp.Champ1, lp.Champ2
  15.  UNION ALL
  16.  SELECT lf.sjr as Champ1, lp.Champ2, lp.Champ3, sum(la.act_mnttotal) AS CumulCredit
  17.  FROM la, lf, ls, lp
  18.  WHERE la.id = lf.id
  19.  AND lf.id = ls.id
  20.  AND ls.id = lp.id
  21.  AND ls.module = 1
  22.  AND ls.dateC >= '20100414'
  23.  AND act = 0
  24.  AND (lf.etat in (3,2) AND la.act = lf.fac_no)
  25.  AND (la.act = lf.fac_no OR la.act = '')
  26.  AND la.datedeb BETWEEN lf.datefac AND lf.datefin
  27.  AND lf.avoir = 1
  28.  GROUP BY  lf.sjr as Champ1, lp.Champ1, lp.Champ2
  29.  ) CumulC
  30. GROUP BY CumulC.Champ1, CumulC.Champ2, CumulC.Champ3
  31. ) A,
  32. (
  33. SELECT CumulD.sjr as Champ1, CumulD.Champ2, CumulD.Champ3, SUM(CumulD.CumulDebit) as Debit 
  34. FROM ( 
  35.  SELECT lf.sjr, lp.Champ2, lp.Champ3,
  36.  SUM(montant) as CumulDebit 
  37.  FROM lr, lf, ls, lp 
  38.  WHERE lr.id = lf.id
  39.  AND lf.id = ls.id
  40.  AND ls.id = lp.id
  41.  AND ls.module = 1
  42.  AND ls.dateC >= '20100414'
  43.  AND ls.mode IN (3,5) 
  44.  GROUP BY lf.sjr, lp.Champ2, lp.Champ3 
  45.  UNION
  46.  SELECT lf.sjr as Champ1, lp.Champ2, lp.Champ3,
  47.  sum(la.mnttotal) AS CumulDebit 
  48.  FROM la, lf, ls, lp
  49.  WHERE la.id = lf.id
  50.  AND lf.id = ls.id
  51.  AND ls.id = lp.id
  52.  AND ls.module = 1
  53.  AND ls.dateC >= '20100414'
  54.  AND la.act = 0
  55.  AND (lf.etat in (3,2) AND la.act = lf.fac_no)
  56.  AND (la.act = lf.fac_no OR la.act = '')
  57.  AND la.datedeb BETWEEN lf.datefac AND lf.datefin
  58.  AND lf.avoir = 0
  59.  GROUP BY  lf.sjr, lp.Champ2, lp.Champ3
  60.  ) CumulD 
  61. GROUP BY CumulD.sjr, CumulD.Champ2, CumulD.Champ3
  62. ) B
  63. WHERE A.Champ1 = B.Champ1
  64. ORDER BY Champ1


 
Merci d'avance de toute l'aide que vous pourrez m'apporter.

mood
Publicité
Posté le 14-04-2011 à 14:56:44  profilanswer
 

n°2069999
skeye
Posté le 14-04-2011 à 15:06:33  profilanswer
 

Et c'est quoi le vrai message d'erreur, là?Je ne vois "Table1" nulle part...
 
T'as pas essayé via des jointures, ton machin, là, sinon? Parce-que ça pique les yeux à lire, quand même...d'autant que les sous-requêtes utilisent toutes les mêmes tables ou presque, ça a pas l'air franchement optimal...[:joce]


---------------
Can't buy what I want because it's free -
n°2070002
skeye
Posté le 14-04-2011 à 15:08:39  profilanswer
 

je me permets de reposter ta requête avec coloration syntaxique, histoire d'essayer d'y voir plus clair.

 
Code :
  1. SELECT DISTINCT(A.Champ1), B.Champ2, B.Champ3,  A.Credit, B.Debit
  2. FROM (
  3.  SELECT CumulC.sjr AS Champ1, CumulC.Champ2, CumulC.Champ3, sum(CumulC.CumulCredit) AS Credit
  4.  FROM (
  5.     SELECT lf.sjr, lp.Champ2, lp.Champ3, sum(montant) AS CumulCredit
  6.     FROM lr, lf, ls, lp
  7.     WHERE lr.id = lf.id
  8.     AND lf.id = ls.id
  9.     AND ls.nip = lp.nip
  10.     AND ls.module = 1
  11.     AND ls.dateC >= '20100414'
  12.     AND ls.mode IN (1,2,4,6)
  13.     GROUP BY lf.sjr, lp.Champ1, lp.Champ2
  14.     UNION ALL
  15.     SELECT lf.sjr AS Champ1, lp.Champ2, lp.Champ3, sum(la.act_mnttotal) AS CumulCredit
  16.     FROM la, lf, ls, lp
  17.     WHERE la.id = lf.id
  18.     AND lf.id = ls.id
  19.     AND ls.id = lp.id
  20.     AND ls.module = 1
  21.     AND ls.dateC >= '20100414'
  22.     AND act = 0
  23.     AND (lf.etat IN (3,2) AND la.act = lf.fac_no)
  24.     AND (la.act = lf.fac_no OR la.act = '')
  25.     AND la.datedeb BETWEEN lf.datefac AND lf.datefin
  26.     AND lf.avoir = 1
  27.     GROUP BY  lf.sjr AS Champ1, lp.Champ1, lp.Champ2
  28.  ) CumulC
  29.  GROUP BY CumulC.Champ1, CumulC.Champ2, CumulC.Champ3
  30. ) A,
  31. (
  32.  SELECT CumulD.sjr AS Champ1, CumulD.Champ2, CumulD.Champ3, SUM(CumulD.CumulDebit) AS Debit
  33.  FROM (
  34.     SELECT lf.sjr, lp.Champ2, lp.Champ3, SUM(montant) AS CumulDebit
  35.     FROM lr, lf, ls, lp
  36.     WHERE lr.id = lf.id
  37.     AND lf.id = ls.id
  38.     AND ls.id = lp.id
  39.     AND ls.module = 1
  40.     AND ls.dateC >= '20100414'
  41.     AND ls.mode IN (3,5)
  42.     GROUP BY lf.sjr, lp.Champ2, lp.Champ3
  43.     UNION
  44.     SELECT lf.sjr AS Champ1, lp.Champ2, lp.Champ3, sum(la.mnttotal) AS CumulDebit
  45.     FROM la, lf, ls, lp
  46.     WHERE la.id = lf.id
  47.     AND lf.id = ls.id
  48.     AND ls.id = lp.id
  49.     AND ls.module = 1
  50.     AND ls.dateC >= '20100414'
  51.     AND la.act = 0
  52.     AND (lf.etat IN (3,2) AND la.act = lf.fac_no)
  53.     AND (la.act = lf.fac_no OR la.act = '')
  54.     AND la.datedeb BETWEEN lf.datefac AND lf.datefin
  55.     AND lf.avoir = 0
  56.     GROUP BY  lf.sjr, lp.Champ2, lp.Champ3
  57.  ) CumulD
  58.  GROUP BY CumulD.sjr, CumulD.Champ2, CumulD.Champ3
  59. ) B
  60. WHERE A.Champ1 = B.Champ1
  61. ORDER BY Champ1


Message édité par skeye le 14-04-2011 à 15:13:01

---------------
Can't buy what I want because it's free -
n°2070009
manuman83
Posté le 14-04-2011 à 15:14:16  profilanswer
 

Pardon oui...
 
En fait Table1 = A et Table2 = B
 
L'histoire que je racontais était plus un exemple...
 
Le message d'erreur est ~:
 
"Impossible d'initialiser la requête, le fichier A n'existe pas.

n°2070010
skeye
Posté le 14-04-2011 à 15:15:56  profilanswer
 

C'est quoi comme sgbd?


---------------
Can't buy what I want because it's free -
n°2070014
manuman83
Posté le 14-04-2011 à 15:17:40  profilanswer
 

J'en ai essayé deux, car un je ne fais pas vraiment confiance... Et j'ai le même message d'erreur...
 
- HyperFile C/S
- MySQL

n°2070015
skeye
Posté le 14-04-2011 à 15:19:09  profilanswer
 

HyperFile j'imagine, pour ton message d'erreur? M'étonnerait que ce genre de sport fonctionne là-dessus...
C'est quoi le message sous mysql? Quelle version?


---------------
Can't buy what I want because it's free -
n°2070016
manuman83
Posté le 14-04-2011 à 15:20:24  profilanswer
 

Mais quelque soit le SGBD, je n'utilise aucune syntaxe SQL (à ma connaissance) qui a des particularité...  
 
Comme decode et case etc... Tous ce que j'utilise sont des instructions de base de SQL (SELECT, FROM, WHERE, GROUP BY, SUM, ORDER BY)

n°2070018
skeye
Posté le 14-04-2011 à 15:21:16  profilanswer
 

Les sgbd ne supportent pas tous 100% du sql "de base"... ;)


---------------
Can't buy what I want because it's free -
n°2070020
manuman83
Posté le 14-04-2011 à 15:27:39  profilanswer
 

Humm ok je viens de trouver...
 
Le test que j'avais effectué sur MySQL était légèrement différent et une erreur c'était glissé.  
En mettant exactement ce que je dois exécuter sur HyperFile C/S dans MySQL ca a fonctionné...
 
Conclusion, tu avais raison.  
 
"M'étonnerait que ce genre de sport fonctionne là-dessus... "  
Je confirme donc.

mood
Publicité
Posté le 14-04-2011 à 15:27:39  profilanswer
 

n°2070463
aoumar
sa arrive de faire des erreurs
Posté le 16-04-2011 à 21:40:35  profilanswer
 

bonsoir à tout le monde j'ai un probleme que j'aimerai aoir de l'aide veuillez m'expliquer les codes suivants:
SQL> Declare
2 LN$Num pls_integer := 0 ;
3 Begin
4 Loop
5 LN$Num := LN$Num + 1 ;
6 dbms_output.put_line( to_char( LN$Num ) ) ;
7 EXIT WHEN LN$Num > 3 ; -- sortie de la boucle lorsque LN$Num est supétieur à 3
8 End loop ;
9 End ;
10 /
1
2
3
4
Procédure PL/SQL terminée avec succès.
 
SQL> Declare
2 LN$I pls_integer := 0 ;
3 LN$J pls_integer := 0 ;
4 Begin
5 <<boucle1>>
6 Loop
7 LN$I := LN$I + 1 ;
8 Loop
9 LN$J := LN$J + 1 ;
10 dbms_output.put_line( to_char( LN$I ) || ',' || to_char( LN$J ) ) ;
11 EXIT boucle1 WHEN LN$J > 3 ;
12 End loop ;
13 End loop ;
14 End ;
15 /
1,1
1,2
1,3
1,4
Procédure PL/SQL terminée avec succès.

n°2070467
skeye
Posté le 16-04-2011 à 22:42:37  profilanswer
 

Non. Crée un topic pour ton problème au lieu de squatter celui des autres.


---------------
Can't buy what I want because it's free -

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Limite des requête imbriqué dans la clause FROM

 

Sujets relatifs
Aide à l'optimisation de requêteProblème avec une requete GROUP BY
[RESOLU] problème requete SQL 2008[SQL][Resolu] requete imbriqué
Les triggers: tester si les insertions n'ont pas dépassé une limiteClause Distinct sous Access
[php] Envoyer resultat requete plusieurs ligne par mailGalère requete MySQL
[Résolu] Problème clause is ambiguous 
Plus de sujets relatifs à : Limite des requête imbriqué dans la clause FROM


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR