Problème dans une requête SQL

Problème dans une requête SQL - SQL/NoSQL - Programmation

Marsh Posté le 23-10-2003 à 17:45:16    

hello :)
 
Comme j'ai besoin de pas mal de screenshots pour expliquer mon pb, j'ai créé un fichier word qui récapitule tout ça : http://www.starwars-universe.com/i [...] y/HELP.zip
 
Merci d'avance à tout ceux qui pourront m'expliquer le pkoi du comment  :jap:


---------------
L'univers de Starwars est désormais à votre portée !
Reply

Marsh Posté le 23-10-2003 à 17:45:16   

Reply

Marsh Posté le 23-10-2003 à 18:30:55    

J'y jette un coupe d'oeil...


---------------
W3C : Leading the Web to Its Full Potential... - Membre du W3C l33t club
Reply

Marsh Posté le 23-10-2003 à 20:19:03    

Ca donne quoi en résumé ? J'ai la flème d'installer Winzip :sleep:
 
(ouais, je sais, XP sait lire les zip, mais c'est juste pour faire chier mon monde en fait :D)

Reply

Marsh Posté le 24-10-2003 à 10:03:55    

ah le chieur ;) :D
en gros c un comportement plutôt bizarre d'une requête SQL...Je donne toute mon estime à celui qui trouve la raison du pkoi du comment


---------------
L'univers de Starwars est désormais à votre portée !
Reply

Marsh Posté le 24-10-2003 à 12:55:26    

J'ai pas la solution mais :
 
( J'ai remplacé les @prompt par les valeurs pour faire plus lisible :D )
 
Déja, y'a un regroupement de AND qui ne sert à rien :
 

Code :
  1. SELECT
  2. MAP_SALES_AREA.SALES_ORG_CODE,
  3. MAP_DOCUMENT_TYPE.DOC_TYPE_CODE,
  4. count( distinct TDS_INVOICE_LINE.INVOICE_NUMBER )
  5. FROM
  6. MAP_SALES_AREA,
  7. MAP_DOCUMENT_TYPE,
  8. TDS_INVOICE_LINE
  9. WHERE
  10. ( MAP_DOCUMENT_TYPE.END_DATE = '31/12/4712'  )
  11. AND  ( MAP_DOCUMENT_TYPE.BE_ID=TDS_INVOICE_LINE.DOC_CATEG_TYPE  )
  12. AND  ( MAP_SALES_AREA.BE_ID=TDS_INVOICE_LINE.SALES_AREA  )
  13. AND  ( MAP_SALES_AREA.END_DATE = '31/12/4712'  )
  14. AND  ( MAP_SALES_AREA.DIST_CHANNEL_CODE<> '20'  )
  15. AND  // <- Ce regroupement de AND ne sert à rien !
  16. (
  17.  (
  18.   MAP_SALES_AREA.SALES_ORG_CODE IN ('1158')
  19.     OR '%' IN ('1158')
  20.  )
  21.  AND
  22.  (
  23.   MAP_DOCUMENT_TYPE.DOC_TYPE_CODE IN ('YFDI')
  24.     OR '%' IN ('YFDI')
  25.  )
  26.  AND  MAP_DOCUMENT_TYPE.DOC_TYPE_CODE  IN  ('YF02', 'YFAV', 'YFIC', 'YFMS', 'YFNT', 'YIV1', 'YFMA')
  27. )
  28. GROUP BY
  29. MAP_SALES_AREA.SALES_ORG_CODE,
  30. MAP_DOCUMENT_TYPE.DOC_TYPE_CODE


 
 
Donc çà devient :
 
La requête qui merde

Code :
  1. SELECT
  2. MAP_SALES_AREA.SALES_ORG_CODE,
  3. MAP_DOCUMENT_TYPE.DOC_TYPE_CODE,
  4. count( distinct TDS_INVOICE_LINE.INVOICE_NUMBER )
  5. FROM
  6. MAP_SALES_AREA,
  7. MAP_DOCUMENT_TYPE,
  8. TDS_INVOICE_LINE
  9. WHERE
  10. ( MAP_DOCUMENT_TYPE.END_DATE = '31/12/4712'  )
  11. AND  ( MAP_DOCUMENT_TYPE.BE_ID=TDS_INVOICE_LINE.DOC_CATEG_TYPE  )
  12. AND  ( MAP_SALES_AREA.BE_ID=TDS_INVOICE_LINE.SALES_AREA  )
  13. AND  ( MAP_SALES_AREA.END_DATE = '31/12/4712'  )
  14. AND  ( MAP_SALES_AREA.DIST_CHANNEL_CODE<> '20'  )
  15. AND
  16. (
  17.  MAP_SALES_AREA.SALES_ORG_CODE IN ('1158')
  18.    OR '%' IN ('1158')
  19. )
  20. AND
  21. (
  22.  MAP_DOCUMENT_TYPE.DOC_TYPE_CODE IN ('YFDI')
  23.    OR '%' IN ('YFDI')
  24. )
  25. AND  MAP_DOCUMENT_TYPE.DOC_TYPE_CODE  IN  ('YF02', 'YFAV', 'YFIC', 'YFMS', 'YFNT', 'YIV1', 'YFMA')
  26. GROUP BY
  27. MAP_SALES_AREA.SALES_ORG_CODE,
  28. MAP_DOCUMENT_TYPE.DOC_TYPE_CODE


 
 
La requête qui marche

Code :
  1. SELECT
  2. MAP_SALES_AREA.SALES_ORG_CODE,
  3. MAP_DOCUMENT_TYPE.DOC_TYPE_CODE,
  4. count( distinct TDS_INVOICE_LINE.INVOICE_NUMBER )
  5. FROM
  6. MAP_SALES_AREA,
  7. MAP_DOCUMENT_TYPE,
  8. TDS_INVOICE_LINE
  9. WHERE
  10. ( MAP_DOCUMENT_TYPE.END_DATE = '31/12/4712'  )
  11. AND  ( MAP_DOCUMENT_TYPE.BE_ID=TDS_INVOICE_LINE.DOC_CATEG_TYPE  )
  12. AND  ( MAP_SALES_AREA.BE_ID=TDS_INVOICE_LINE.SALES_AREA  )
  13. AND  ( MAP_SALES_AREA.END_DATE = '31/12/4712'  )
  14. AND  ( MAP_SALES_AREA.DIST_CHANNEL_CODE<> '20'  )
  15. AND
  16. (
  17.  MAP_SALES_AREA.SALES_ORG_CODE IN ('1158')
  18.  OR '%' IN ('1158')
  19. )
  20. AND  MAP_DOCUMENT_TYPE.DOC_TYPE_CODE  IN  ('YF02', 'YFAV', 'YFIC', 'YFMS', 'YFNT', 'YIV1', 'YFMA')
  21. AND
  22. (
  23.  MAP_DOCUMENT_TYPE.DOC_TYPE_CODE IN ('YFDI')
  24.  OR '%' IN ('YFDI')
  25. )
  26. GROUP BY
  27. MAP_SALES_AREA.SALES_ORG_CODE,
  28. MAP_DOCUMENT_TYPE.DOC_TYPE_CODE


   
Essaye comme çà directement dans ton SGBD (sans passer par BO) pour voir ce que çà donne.
 
C'est peut-être BO qui essaye d'optimiser la requête et qui se prend les pieds dans le tapis :D


Message édité par Mara's dad le 24-10-2003 à 12:58:39

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 24-10-2003 à 17:41:55    

OK Merci
effectivement BO rajoute pleins de parenthèses qui ne servent à rien :(


---------------
L'univers de Starwars est désormais à votre portée !
Reply

Marsh Posté le 25-10-2003 à 09:16:04    

Ouais mais un gregroupement de AND (avec des parenthèses quoi) ne change rien au résultat. Le AND c'est comme le + arithmétique. Parenthèses ou non, le résultat est toujours rigoureusement le même.

Reply

Marsh Posté le 25-10-2003 à 09:29:53    

Bien sûr...n'empèche que la requête devient moins lisible avec des tonnes de parenthèses inutiles


---------------
L'univers de Starwars est désormais à votre portée !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed