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 :

ERROR 1054 (42S22): Unknown column 't.pere' in 'IN/ALL/ANY subquery' [MySQL-5.7]


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2020
    Messages : 12
    Points : 8
    Points
    8
    Par défaut ERROR 1054 (42S22): Unknown column 't.pere' in 'IN/ALL/ANY subquery'
    Bonjour J'ai besoin de votre aide

    Je créé ma table des partants sur la base de ma référence compétition
    cela me donne les noms des partants avec le nom des pères et des mères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE partant AS 
      SELECT a.jour,
             a.cheval, , 
             a.pere, 
             a.mere
      FROM   pturf1.cachedate AS a 
             LEFT JOIN pturf1.hippo AS b 
                    ON a.hippo = b.hippo 
             LEFT JOIN pturf1.caractrap AS c 
                    ON a.comp = c.comp                
      WHERE  a.comp = "1181177";
    VOICI LA SORTIE:
    Nom : Capture.JPG
Affichages : 261
Taille : 68,1 Ko


    Maintenant que j'ai ma table des partants, je souhaite savoir si le père de chaque cheval a été un bon athlète?
    pour cela je demande d'aller chercher les nom des pères dans ma table partants et de vérifier dans ma table cachedate le nombres de fois ou le père en tant que coureur à gagner en étant le 1er, 2e et 3e puis me faire la somme des nombres.

    Voici ma requêtes pour obtenir le résultat, mais j'ai un message d'erreur

    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
    CREATE TABLE pere AS
    SELECT t.*
    FROM   (
    SELECT cheval, SUM(total_per) AS total_pere
    FROM (
        SELECT cheval, (Top_1+Top_2+Top_3)AS total_per
        FROM 
        (
            SELECT comp, jour, cheval, cl, 
            sum(case when `cl` = '1er' then 1 else 0 end)/count(*) as Top_1, 
            sum(case when `cl` = '2e' then 1 else 0 end)/count(*) as Top_2,
            sum(case when `cl` = '3e' then 1 else 0 end)/count(*) as Top_3
            FROM pturf1.cachedate
            WHERE typec ="plat"
            GROUP BY comp, cheval
        ) AS pere_1
    ) AS pere_2
          ) t 
    WHERE t.pere IN (SELECT pere FROM pturf1.partant);
    VOICI MA TABLE CACHEDATE
    Nom : Capture.JPG
Affichages : 257
Taille : 89,8 Ko

    A tenir compte que dans la colonne des noms du père le nom est écrie
    EXEMPLE:
    Le père dans la colonne pere : Dusk Till Down
    Le père dans la colonne cheval : Dusk Till Down IRL


    Voici le message d'erreur
    ERROR 1054 (42S22): Unknown column 't.pere' in 'IN/ALL/ANY subquery'

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Si on "abrège" la requête, on a ceci:
    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
     
    SELECT cheval, SUM(total_per) AS total_pere
    FROM 
    (
        SELECT cheval, (Top_1+Top_2+Top_3)AS total_per
        FROM 
        (
            SELECT comp, jour, cheval, cl, 
            sum(case when `cl` = '1er' then 1 else 0 end)/count(*) as Top_1, 
            sum(case when `cl` = '2e' then 1 else 0 end)/count(*) as Top_2,
            sum(case when `cl` = '3e' then 1 else 0 end)/count(*) as Top_3
            FROM pturf1.cachedate
            WHERE typec ="plat"
            GROUP BY comp, cheval
        ) AS pere_1
    ) AS pere_2
     
    ...
    C'est la requête qui construit la table t.
    Celle-ci ne possède que les colonnes du premier SELECT, donc cheval, SUM(total_per) AS total_pere.
    Il faut donc modifier cette partie pour ajouter les colonnes manquantes.

    Tatayo.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2020
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Non ma table t, c'est ma table des partants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t.*
    FROM   (......) t 
    WHERE t.pere IN (SELECT pere FROM pturf1.partant);
    Ce bout de code dit: va chercher les noms des pères dans ma table partant et regard le nom du père dans la table cachedate EN TANT QUE CHEVAL et fait la somme de fois ou il ete en 1er, 2e et 3e...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Non, les seules colonnes accessibles sur la table T sont celles qui sont présente dans le SELECT utilisé pour la construire, donc ici celui de la ligne 5.
    Tu n'as donc que 2 colonnes: cheval et total_pere.
    Quand bien même une autre colonne est dans un SELECT sur une des sous-requêtes, elle ne sera pas accessible.

    Si tu veux une colonne supplémentaire pour ta table T, elle doit apparaître sur cette ligne.

    Tatayo.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2020
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Jai compris je suis obliger de passer par une table intermédiaire. d'abord faire une table de performance cheval puis aller chercher les pères en tant que cheval et perf.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Pas forcément, vu qu'un cheval n'a qu'un père (enfin normalement ), tu dois pourvoir ajouter une jointure quelque part dans une des sous-requête, et "remonter" cette information jusqu'au premier SELECT.

    Cela étant dit, je pense que ta requête peut être simplifiée.
    Je ne pense pas non plus que tu ais vraiment besoin de 4 niveaux de sous-requête
    Par exemple je vois un SUM() sans GROUP BY associé (pour pere_2). Tu dois donc pouvoir supprimer ce niveau.
    Et comme tu n'as aucune jointure, aucun regroupement utile sur aucun niveau, à part la requête ligne 9 à 15, je pense que tu faire la même chose sans la moindre sous-requête.

    Tatayo.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2020
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Justement c'est la que je bloque. Oui un cheval à un seul père sauf que le père fut un temps un coureur donc il est aussi présent dans la colonne cheval, donc les chevaux qui vont courir sur une course x, savoir si ils vient d'un géniteur champion.

  8. #8
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Bonsoir Sobay06,

    Tu cherches les chevaux (=concurrents) qui sont des pères donc ta dernière ligne pour créer la 2e table devrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE t.cheval IN (SELECT pere FROM pturf1.partant);
    Grâce à quoi tu construis la table des performances des pères, que tu pourra consulter pour chaque partant.

    Non?
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2020
    Messages : 12
    Points : 8
    Points
    8
    Par défaut bonsoir tatayo
    Ca marche. Merci de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/10/2019, 12h48
  2. Réponses: 25
    Dernier message: 17/05/2016, 23h04
  3. [MySQL-5.5] erreur 42S22 Unknown column
    Par diblasio dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/04/2013, 23h24
  4. #1054 - Unknown column 'mod' in 'IN/ALL/ANY subquery'
    Par Dominique49 dans le forum Requêtes
    Réponses: 8
    Dernier message: 05/01/2012, 09h44
  5. 1054 - Unknown column 'language_id' in 'where clause'
    Par Tonio_17000 dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/06/2009, 22h01

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