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 MySQL Discussion :

Aide pour requête SELECT relativement simple.


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut Aide pour requête SELECT relativement simple.
    Bonjour,

    Je bloque pour formuler une requête suivante :

    Récupérer toutes les données de la table Correspondants Rapport avec les CODE_GP3 uniques.

    J'arrive à récupérer tous les CODE_GP3 uniques sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select DISTINCT @[Correspondants Rapport].[CODE_GP3]
    From @[Correspondants Rapport]
    Seul problème, je me fais jeter car je n'ai pas récupéré les autres informations qui vont avec, dans l'idée, ma requête devrait donc être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select *
    From @[Correspondants Rapport]
    Mais avec le DISTINCT @[Correspondants Rapport].[CODE_GP3]

    Je sais que j'y suis presque, il me manque pas grand chose !

    Cordialement,
    Romain.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Euh... @ et noms de colonnes entre crochets... tu es sûr que tu travailles avec MySQL ?

    Récupérer toutes les données de la table Correspondants Rapport avec les CODE_GP3 uniques.
    Cette table semble être une table associative non ?

    Il faudrait donc faire une jointure avec la table à laquelle fait référence CODE_GP3 pour récuprer les autres infos.

    Que contient cette table ?
    Comment est-elle structurée ?
    Que contient CODE_GP3 ?
    Est-ce une clé étrangère référençant une autre table ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Oui je sais pour la syntaxe avec les @ et les [] c'est parce que je passe par une appli de données variable qui exploite des bases de données (ici un fichier excel) mais qui peut filtrer les données sur la base d'une requête "sql"...

    le code GP3 et toutes les infos sont dans la même table, je pense qu'il n'y a pas de jointure à faire.

    Sinon la table content une vingtaine de champs texte;
    la structure c'est donc un fichier excel avec les en tête et les données ([Correspondants Rapport] représenta la feuille de calcul et [CODE_GP3] une en tête);
    [CODE_GP3] content des codes, à 6 chiffes, avec de nombreux doublons, d'ou le filtre;
    Donc pas de clé étrangère, tout est dans la même table.

    La syntaxe que je vous ai donné est bonne, même si elle vous semble étrangère, si vous me donné le résultat en mysql ça ira très bien.

    Je le redis donc, je dois extraire la totalité des données de la table [Correspondants Rapport] mais seulement pour des [CODE_GP3] uniques.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Ambuletz Voir le message
    Je le redis donc, je dois extraire la totalité des données de la table [Correspondants Rapport] mais seulement pour des [CODE_GP3] uniques.
    S'il y a des doublons de CODE_GP3, on peut supposer que pour un CODE_GP3 donné, les autres colonnes n'auront pas forcément la même valeur, sinon, autant supprimer les lignes en double !
    Comment alors choisir l'information qu'il faut accoler à un CODE_GP3 donné ?

    Ce qu'il faut savoir, c'est que DISTINCT opère sur toutes les colonnes figurant dans le SELECT.
    La requête ci-dessous donnera tous les couples {col1, col2} distincts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT col1, col2
    FROM la_table
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    C'est juste, pour plusieurs lignes contenant le même code GP3, les autres informations ne sont pas identiques (il ne faut donc pas supprimer ces lignes)

    Comment choisir le la bonne info accolée au code GP3 ? j'ai envie de dire ce n'est pas un problème car ces infos ne sont pas exploitée. Là vous allez me dire, pourquoi alors ne pas récupérer UNIQUEMENT les codes GP3 avec le distinct ? Dans l'idée oui, c'est ça que je veux, mais techniquement j'ai une erreur car la plateforme s'attend à ce que tous les champs soient formulés dans la requête.

    Je suis en train de chercher en parallèle, il n'y aurait pas moyen d'obtenir ce résultat avec ORDER BY par hasard ?

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Comme je ne vais pas tarder à affronter l'enfer des transports en commun, je vais être bref : change de plateforme puisqu'elle ne semble pas permettre de faire ce que tu souhaites !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Idem pour moi mais je vais prendre le temps de répondre car j'aurai la flème après :p

    Le truc c'est que je ne peux pas changer de plateforme. C'est pas que c'est "fermé" mais la boite a investi plusieurs centaines de milliers d'euros dans une solution, et là je suis sur un point tellement particulier que si ça ne se fait pas, ça ne changera rien.

    En fait on est censé faire des requêtes très simples, disons même que pour l'opérateur, il y a absence de requête car il fait tout visuellement dans l'interface utilisateur (un peu WISIWIG si vous voulez sauf qu'on est sur InDesign).

    Déjà les requêtes SQL représentent une utilisation avancée de l'appli (on va dire à peine 10% des cas) de plus elle a sa propre syntaxe donc chiant...

    Si je ne trouve pas la solution demain ce n'est pas grave je trouverai une parade mais c'était histoire d'automatiser au maximum et d'éviter les erreurs.


    A la limite la plateforme n'est pas en cause, tout ce que l'on peut exprimer en SQL, on peut l'intégrer dans l'appli, c'est donc que ma requête est soit impossible à formuler, soit complètement illogique et je n'ai pas choisi le bon raisonnement.

    On ne peut donc pas formuler une requête qui sélectionne tout dans une table, mais qui renvoie seulement le résultat là ou un champs a une valeur unique ?

    Bon courage pour les transports ^^

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Ambuletz Voir le message
    je n'ai pas choisi le bon raisonnement.
    Je pencherais pour cette hypothèse !

    On ne peut donc pas formuler une requête qui sélectionne tout dans une table, mais qui renvoie seulement le résultat là ou un champs a une valeur unique ?
    C'est bien ce que je disais !
    J'ai du mal à comprendre l'exactitude du besoin exprimé de la sorte.

    Des données exemple et le résultat attendu pourraient nous aider à bien comprendre.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Je vais donc essayer de reformuler (merci de me suivre dans mon problème en tout cas)


    Exemple de base :

    Prénom; Ville; Code GP3;
    Patrick; Lyon; 000011
    Lionel; Paris; 000011
    Jacques; Paris; 000034
    Martine; Bordeaux; 000046

    Je veux en tirer trois résultats, car il y a en tout trois codes GP3 différents.

    J'ai formulé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT @[Correspondants Rapport].[CODE_GP3]
    FROM @[Correspondants Rapport]
    ça fonctionne bien, j'extrait seulement les codes GP3 uniques.

    PROBLEME :
    Pour des raisons X et Y, j'ai ensuite introduit mon produit dans une application, et j'ai donc un message d'erreur qui me dit en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    The field(s): Prénom, Ville;
    are defined in the Plan file Recipient Information Schema,
    but do not appear in the recipient filter.
    Comprendre : les champs Prénom et Ville sont définis dans le schéma (le fichier) mais n'apparaissent pas dans le filtre (la requête)

    Il faut donc que je formule cette requête plus haut, en incluant tous les champs de la table

  10. #10
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Faisons donc fi de la logique et utilises un GROUP BY sur le Code GP3.
    Le résultat sera complètement aléatoire sur les colonnes Prénom et Ville, mais puisque tu t'en tapes.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Hey,

    En gros, simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM @[Correspondants Rapport]
    GROUP BY @[Correspondants Rapport].[CODE_GP3]
    ?


    Si oui, ça vous parle cette erreur :

    Query execution failed.
    Please check query "..".
    (OLEDB Message: Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée 'Prénom' comme une partie de la fonction d'agrégat.)
    ?

  12. #12
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Comportement normal de SQL standard, toutes les colonnes significatives de la clause SELECT doivent participer de la clause GROUP BY.
    Ce qui m'étonne c'est que MySQL, se contrefiche habituellement de cette règle.
    Comme le présentait Cinephil tout cela semble bien loin de MySQL.
    Essaye d'invoquer toutes les autres colonnes avec des fonctions comme MIN OU MAX, au point où on en est.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  13. #13
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Ce genre de fonction ne doit-elle pas être utilisée sur des valeurs numériques uniquement ?

    Bon en tout cas j'ai essayé :

    Recipients Filter: Query execution failed.
    Please check query "...".
    (OLEDB Message: Fonction utilisée avec un nombre d'arguments incorrect dans l'expression 'MIN( Prénom , Ville '.)
    Il va falloir songer à jeter l'éponge

  14. #14
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    MIN() n'attend qu'un argument, tu dois l'utiliser pour chacune des colonnes.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  15. #15
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Ah oui là j'ai fais le boulet...


    Bon, bah je crois qu'on va s'arrêter là, la requête est "bonne" et je retombe sur ce message :

    The field(s): Prénom, Ville;
    are defined in the Plan file Recipient Information Schema,
    but do not appear in the recipient filter.
    Pourtant ces champs sont bien dans le filtre dans la mesure où il sont exprimés dans la requête mais je crois qu'on va s'arrêter là, dans ce détournement de fonction qui a failli -_-

    Merci pour l'aide apportée en tout cas !

Discussions similaires

  1. Aide pour requête SQL assez simple
    Par Pilloutou dans le forum Langage SQL
    Réponses: 15
    Dernier message: 28/03/2008, 15h07
  2. [MySQL]Aide pour requête simple
    Par Pill_S dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2007, 10h40
  3. Besoin d'aide pour requête simple
    Par vallica dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/02/2007, 09h33
  4. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27
  5. Aide pour Requête
    Par Guiche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/11/2003, 20h18

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