IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Comment faire lorsque la requete est trop longue ?


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut Comment faire lorsque la requete est trop longue ?
    Salut à tous

    J'ai une méga requete SQL a entrer dans access, le problème, c'est qu'elle est trop longue pour tenir que sur une ligne.

    Comment faire pour arranger le problème ?

    j'avais vu la technique du & _ , mais cela n'a pas l'air de fonctionner

    Merci !

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    pouvez-vous montrer votre requete pour lui faire subir un lifting ?
    Nous avons d'excellents chirurgiens

    cordialement,

    philippe

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    ola, vous savez pas à qui vous avez affaire lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tbl_civilite.libel_civilite, tbl_particulier.nom_part, tbl_particulier.prenom_part, tbl_particulier.email_part, tbl_particulier.fax_priv_part
    FROM (tbl_cp INNER JOIN (tbl_profession INNER JOIN (tbl_situationfamilialle INNER JOIN (tbl_situation INNER JOIN (tbl_civilite INNER JOIN tbl_particulier ON tbl_civilite.num_civilite = tbl_particulier.[num_civilite#]) ON tbl_situation.num_situation = tbl_particulier.[num_situation#]) ON tbl_situationfamilialle.num_situationfam = tbl_particulier.[num_situationfam#]) ON tbl_profession.num_prof = tbl_particulier.[num_prof#]) ON tbl_cp.num_cp = tbl_particulier.[num_cp#]) INNER JOIN (tbl_compagnie INNER JOIN tbl_particulier_compagnie ON tbl_compagnie.num_compagnie = tbl_particulier_compagnie.[num_compagnie#]) ON tbl_particulier.num_part = tbl_particulier_compagnie.[num_part#]
    WHERE (((tbl_particulier.num_part)<>0))
    GROUP BY tbl_civilite.libel_civilite, tbl_particulier.nom_part, tbl_particulier.prenom_part, tbl_particulier.email_part, tbl_particulier.fax_priv_part;
    J'ai fait la requete sous le module requetes d'access, en QBE, pour etre sur que je n'oublie rien, et apres, je l'ai collé en code, je l'avoue, c'est fort gras, mais bon..

    Merci de regarder ça !

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    SELECT
     tbl_civilite.libel_civilite,
     tbl_particulier.nom_part,
     tbl_particulier.prenom_part,
     tbl_particulier.email_part,
     tbl_particulier.fax_priv_part
    FROM
     (tbl_cp
    INNER JOIN
     (tbl_profession
    INNER JOIN
     (tbl_situationfamilialle
    INNER JOIN
     (tbl_situation
    INNER JOIN
     (tbl_civilite
    INNER JOIN
     tbl_particulier
     ON
      tbl_civilite.num_civilite = tbl_particulier.[num_civilite#])
     ON
      tbl_situation.num_situation = tbl_particulier.[num_situation#])
     ON
      tbl_situationfamilialle.num_situationfam = tbl_particulier.[num_situationfam#])
     ON
      tbl_profession.num_prof = tbl_particulier.[num_prof#])
     ON
      tbl_cp.num_cp = tbl_particulier.[num_cp#])
    INNER JOIN
     (tbl_compagnie
    INNER JOIN
     tbl_particulier_compagnie
     ON
      tbl_compagnie.num_compagnie = tbl_particulier_compagnie.[num_compagnie#])
     ON
      tbl_particulier.num_part = tbl_particulier_compagnie.[num_part#]
    WHERE
     (((tbl_particulier.num_part)<>0))
    GROUP BY
     tbl_civilite.libel_civilite,
     tbl_particulier.nom_part,
     tbl_particulier.prenom_part,
     tbl_particulier.email_part,
     tbl_particulier.fax_priv_part;
    la requete retourne les champs que de 2 tables qui sont liées directement par un inner join (tbl_civilite.num_civilite = tbl_particulier.[num_civilite#]).

    Est-il utile de faire des jointures avec les autres tables ?

    pour info, pourquoi y'a t'il un <#> à la fin de certains champs ?

    Philippe

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    ce sont des clés étrangères les " # " ( j'ai appris à les différencier comme ça en cours )

    Je peux mettre tout ca sur une seule ligne et c'est pareil que ce que je vous avais donné ?

    merci le lifteur !

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    Mais je comprend pas pourquoi dans le code d'access, on peut pas faire une requete sur plusieurs lignes ??

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Points : 1 041
    Points
    1 041
    Par défaut
    bonjour,
    il faut
    "SELECT tbl_civilite.libel_civilite, tbl_particulier.nom_part, "tbl_particulier.prenom_part, " & _
    " tbl_particulier.email_part, tbl_particulier.fax_priv_part " &_
    "FROM (tbl_cp INNER JOIN (tbl_profession INNER JOIN (tbl_situationfamilialle " & _
    ......
    " tbl_particulier.fax_priv_part;"
    cela devrai fonctionner

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    ben j'avais deja essayé, mais ca n'a pas l'air de fonctionner...

    je vais réésayer !

    Merci !

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    J'ai pas lifté encore, j'ai étalé pour mieux voir ...

    On peut peut être allier la solution de cbleas et une compression initiale en enlevant le code inutile (enfin j'espère )

    Voici le résultat à main levée du lifting, à vérifier si ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT T2.libel_civilite,T1.nom_part,T1.prenom_part,T1.email_part,T1.fax_priv_part FROM tbl_particulier T1 INNER JOIN tbl_civilite T2 ON T1.[num_civilite#] = T2.num_civilite WHERE T1.num_part<>0 GROUP BY T2.libel_civilite,T1.nom_part,T1.prenom_part,T1.email_part,T1.fax_priv_part;
    281 caractères au lieu de 1023...

    dans l'espoir que ça vous plaise...

    Philippe

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Points : 1 041
    Points
    1 041
    Par défaut
    la méthode avec les &_ fonctionne. par contre pour ce qui est du # cela ne devait pas etre un cour ACCESS car il est réservé pour les dates.

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    ben j'ai retenu ca :

    Soit une table client :

    num_client, nom_client, ..., commune#

    une table commune :

    code_commune, commune

    Le commune# de la table client est le commune de la table commune, et pour différencier les deux, on mettait un # a la fin de la clé étrangère.

    voili voilou

    Edit : apres, c'était beaucoup sur papier, avec MERISE, des bases pas super complexes, donc ca doit passer, mais pour des trucs plus compliqués, je sais pas...

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    Merci philben pour votre proposition, [edit]je vais essayer
    Merci !

  13. #13
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bon, le docteur va se coucher et vous laisse le choix entre les 2 solutions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "SELECT T2.libel_civilite,T1.nom_part,T1.prenom_part,T1.email_part,T1.fax_priv_part " & _
    "FROM tbl_particulier T1 INNER JOIN tbl_civilite T2 ON T1.[num_civilite#] = T2.num_civilite " & _
    "WHERE T1.num_part<>0 GROUP BY T2.libel_civilite,T1.nom_part,T1.prenom_part,T1.email_part,T1.fax_priv_part;"
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    "SELECT tbl_civilite.libel_civilite, tbl_particulier.nom_part, tbl_particulier.prenom_part, " & _
    "tbl_particulier.email_part, tbl_particulier.fax_priv_part FROM (tbl_cp INNER JOIN " & _
    "(tbl_profession INNER JOIN (tbl_situationfamilialle INNER JOIN (tbl_situation INNER JOIN " & _
    "(tbl_civilite INNER JOIN tbl_particulier ON tbl_civilite.num_civilite = " & _
    "tbl_particulier.[num_civilite#]) ON tbl_situation.num_situation = tbl_particulier.[num_situation#]) " & _
    "ON tbl_situationfamilialle.num_situationfam = tbl_particulier.[num_situationfam#]) ON " & _
    "tbl_profession.num_prof = tbl_particulier.[num_prof#]) ON tbl_cp.num_cp = " & _
    "tbl_particulier.[num_cp#]) INNER JOIN (tbl_compagnie INNER JOIN tbl_particulier_compagnie ON " & _
    "tbl_compagnie.num_compagnie = tbl_particulier_compagnie.[num_compagnie#]) ON " & _
    "tbl_particulier.num_part = tbl_particulier_compagnie.[num_part#] WHERE (((tbl_particulier.num_part)<>0)) " & _
    "GROUP BY tbl_civilite.libel_civilite, tbl_particulier.nom_part, tbl_particulier.prenom_part, " & _
    "tbl_particulier.email_part, tbl_particulier.fax_priv_part;"
    bonne nuit les ptits loups

    Philippe

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Points : 12
    Points
    12
    Par défaut
    Merci a vous Philippe, je vais voir ce que je peux faire, et vous tiens au courant !

    Bonne nuit !

  15. #15
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut à tous,

    on pourrait encore relifter sur ton code philben: en reprenant 'tbl_particulier' et 'tbl_civilite' dans d'autre requete pour renommer le nom des champs...

    mais bon là le mamouth il lui restera que les os...

  16. #16
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour Vodiem,

    mais bon là le mamouth il lui restera que les os...
    Je suis déjà très inquiet comme ça, il n'est pas venu à la consultation prévue le lendemain...
    je redoute un trauma post-opératoire !

    Amicalement,

    Philippe

  17. #17
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 50
    Points : 41
    Points
    41
    Par défaut Déterrage de post
    L'assitant SQL d'ACCESS n'est pas ton ami donc...
    Sur-Lifting
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    "SELECT libel_civilite,nom_part,prenom_part,email_part,fax_priv_part" & _
     " FROM (((((([tbl_particulier] A" & _
      " INNER JOIN [tbl_civilite] B ON A.[num_civilite#]=B.num_civilite)" & _
      " INNER JOIN [tbl_situation] C ON A.[num_situation#]=C.num_situation)" & _
      " INNER JOIN [tbl_situationfamilialle] D ON A.[num_situationfam#]=D.num_situationfam)" & _
      " INNER JOIN [tbl_profession] E ON A.[num_prof#]=E.num_prof)" & _
      " INNER JOIN [tbl_cp] F ON A.[num_cp#]=F.num_cp)" & _
      " INNER JOIN [tbl_particulier_compagnie] G ON A.num_part=G.[num_part#])" & _
      " INNER JOIN [tbl_compagnie] H ON G.[num_compagnie#]=H.num_compagnie" & _
     " WHERE num_part<>0" & _
     " GROUP BY libel_civilite,nom_part,prenom_part,email_part,fax_priv_part;"

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/06/2007, 16h13
  2. Réponses: 1
    Dernier message: 11/04/2007, 16h11
  3. [VB.net]Requete Insert trop longue?
    Par Hakki dans le forum Accès aux données
    Réponses: 7
    Dernier message: 24/10/2006, 10h06
  4. Erreur Delphi "La requete est trop complexe"
    Par Chimere dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/06/2006, 11h24
  5. [Conversion]Comment faire pour couper un Double trop long?
    Par dessinateurttuyen dans le forum Général Java
    Réponses: 1
    Dernier message: 13/11/2005, 02h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo