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 :

Erreur "Not unique table/alias"


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Erreur "Not unique table/alias"
    Bonjour à tous
    J'ai un problème avec ma requête SQL.
    Après exécution, j'ai un message d'erreur du genre :
    #1066 - Not unique table/alias: 't_ville'
    Est-ce que qq1 peut me dire quelle est l'origine de cette erreur et comment faire pour ne plus l'avoir. Merci pour vos aides
    Ma requête est la suivante :

    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
    SELECT * 
    FROM t_coordonner 
    left join t_situation_personele  on t_coordonner.mle = t_situation_personele .mle
    left join t_situation_familiale  on t_situation_familiale.id_situation_familiale = t_situation_personele .id_situation_familiale
    left join t_conjoint  on t_conjoint.id_conjoint = t_situation_personele .id_conjoint
    left join t_enfants_personele  on t_conjoint.id_conjoint = t_enfants_personele .id_conjoint
    left join t_profession_de_conjoint  on t_conjoint.profession_de_conjoint = t_profession_de_conjoint .id_profession_de_conjoint
    left join t_enfants on t_enfants_personele.id_enfants = t_enfants.id_enfants
    left join t_sex on t_enfants.id_sex = t_sex.id_sex
    left join t_coordonner_diplome on t_coordonner.mle = t_coordonner_diplome.mle
    left join t_diplome on t_coordonner_diplome.id_diplome = t_diplome.id_diplome
    left join t_coordonner_mutations on t_coordonner_mutations.mle = t_coordonner.mle
    left join t_mutation_successives on t_coordonner_mutations.id_mutations_successives = t_mutation_successives.id_mutation_successives
    left join t_coordonner_dinstruction on t_coordonner.mle = t_coordonner_dinstruction.mle
    left join t_niveau_dinstruction on t_niveau_dinstruction.id_niveau_dinstruction = t_coordonner_dinstruction.id_niveau_dinstruction
    left join t_niveau_dinstruction_superieur on t_niveau_dinstruction_superieur.id_niveau_dinstruction_superieur = t_coordonner_dinstruction.id_niveau_dinstruction_superieur
    left join t_grade on t_coordonner.grade = t_grade.code_grade
    left join t_ville on t_coordonner.ville_de_naissance = t_ville.id_ville
    left join t_ville on t_coordonner.ville_actual = t_ville.id_ville
    left join t_service on t_coordonner.service = t_service.id_service
    left join t_fonction on t_coordonner.fonction = t_fonction.id_fonction
    left join t_personne_sos on t_coordonner.mle = t_personne_sos.mle
    left join t_coordonner_phone on t_coordonner.mle = t_coordonner_phone.mle
    left join t_phone on t_coordonner_phone.id_phone = t_phone.id_phone
    left join t_coordonner_langue on t_coordonner.mle = t_coordonner_langue.mle
    left join t_langues on t_coordonner_langue.id_langue = t_langues.id_langues
    left join t_niveau_de_langue on t_coordonner_langue.id_niveau_de_langue = t_niveau_de_langue.id_niveau_de_langue
    left join t_coordonne_sport on t_coordonner.mle = t_coordonne_sport.mle
    left join t_sport on t_coordonne_sport.id_sport = t_sport.id_sport
    left join t_dan on t_coordonne_sport.id_dan = t_dan.id_dan
    left join t_coordonner_permis on t_coordonner.mle = t_coordonner_permis.mle
    left join t_permis on t_coordonner_permis.id_permis = t_permis.id_permis
    left join t_coordonner_sanction on t_coordonner.mle = t_coordonner_sanction.mle
    left join t_sanction on t_coordonner_sanction.id_sanction = t_sanction.id_sanction
    left join t_arme on t_coordonner.mle = t_arme.mle
    left join t_pistolet on t_arme.id_pistolet = t_pistolet.id_pistolet
    left join t_insigne on t_arme.id_insigne = t_insigne.id_insigne

  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
    Le souci se situe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LEFT JOIN t_ville ON t_coordonner.ville_de_naissance = t_ville.id_ville
    LEFT JOIN t_ville ON t_coordonner.ville_actual = t_ville.id_ville
    Tu emploies deux fois la table t_ville sans lui mettre d'alias.

    D'une manière générale :
    1) Utilise des alias, dès qu'il y a plus d'une table dans une requête.
    Ça rend la requête plus facile à écrire, à lire, à débugguer et ça évite ce genre d'erreur.

    2) Évite de relancer la guerre des étoiles !

    3) Indente ton code, quel que soit le langage.
    Ça rend la requête ou le programme plus facile à écrire, à lire, à débugguer.

    Voici ta requête corrigée, en espérant que je n'ai pas mis plusieurs alias identiques :
    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
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM t_coordonner c
    LEFT JOIN t_situation_personele sp ON c.mle = sp.mle
    	LEFT JOIN t_situation_familiale sf ON sf.id_situation_familiale = sp.id_situation_familiale
    	LEFT JOIN t_conjoint cj ON cj.id_conjoint = sp.id_conjoint
    		LEFT JOIN t_enfants_personele ep ON cj.id_conjoint = ep.id_conjoint
    			LEFT JOIN t_enfants e ON ep.id_enfants = e.id_enfants
    				LEFT JOIN t_sex s ON e.id_sex = s.id_sex
    		LEFT JOIN t_profession_de_conjoint pcj ON cj.profession_de_conjoint = pcj.id_profession_de_conjoint
    LEFT JOIN t_coordonner_diplome cd ON c.mle = cd.mle
    	LEFT JOIN t_diplome d ON cd.id_diplome = d.id_diplome
    LEFT JOIN t_coordonner_mutations cm ON cm.mle = c.mle
    	LEFT JOIN t_mutation_successives ms ON cm.id_mutations_successives = ms.id_mutation_successives
    LEFT JOIN t_coordonner_dinstruction ci ON c.mle = ci.mle
    	LEFT JOIN t_niveau_dinstruction ni ON ni.id_niveau_dinstruction = ci.id_niveau_dinstruction
    		LEFT JOIN t_niveau_dinstruction_superieur nis ON nis.id_niveau_dinstruction_superieur = ni.id_niveau_dinstruction_superieur
    LEFT JOIN t_grade g ON c.grade = g.code_grade
    LEFT JOIN t_ville v ON c.ville_de_naissance = v.id_ville
    LEFT JOIN t_ville v2 ON c.ville_actual = v2.id_ville
    LEFT JOIN t_service sv ON c.service = sv.id_service
    LEFT JOIN t_fonction f ON c.fonction = f.id_fonction
    LEFT JOIN t_personne_sos ps ON c.mle = ps.mle
    LEFT JOIN t_coordonner_phone cph ON c.mle = cph.mle
    	LEFT JOIN t_phone ph ON cph.id_phone = ph.id_phone
    LEFT JOIN t_coordonner_langue cl ON c.mle = cl.mle
    	LEFT JOIN t_langues l ON cl.id_langue = l.id_langues
    		LEFT JOIN t_niveau_de_langue nl ON cl.id_niveau_de_langue = nl.id_niveau_de_langue
    LEFT JOIN t_coordonne_sport csp ON c.mle = csp.mle
    	LEFT JOIN t_sport sp ON csp.id_sport = sp.id_sport
    	LEFT JOIN t_dan d ON csp.id_dan = d.id_dan
    LEFT JOIN t_coordonner_permis cpr ON c.mle = cpr.mle
    	LEFT JOIN t_permis pr ON cpr.id_permis = pr.id_permis
    LEFT JOIN t_coordonner_sanction cst  ON c.mle = cst.mle
    	LEFT JOIN t_sanction st ON cst.id_sanction = st.id_sanction
    LEFT JOIN t_arme a ON c.mle = t_arme.mle
    	LEFT JOIN t_pistolet pt ON a.id_pistolet = pt.id_pistolet
    	LEFT JOIN t_insigne i ON a.id_insigne = i.id_insigne
    Euh... pourquoi as-tu besoin d'une requête aussi monstrueuse ?
    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
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    vraiment je te remercies mon frère ou début
    c'est la premier fois que je travailles avec mysql
    et je prendre le risque de travailles sur une grande application personnelle
    et je veux dans cette application afficher tt les information de la personne meme c'est ile ne existe pas je veux maitre les donnes que existe afficher
    et vraiment je ss pas comment a faire
    et finalement la requête ça marche pas



    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM t_coordonner c LEFT JOIN t_situation_personele sp ON c.mle = sp.mle LEFT J' at line 2

  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
    Évidemment ! Il faut remplacer mon commentaire au sujet de l'étoile par les colonnes dont tu as réellement besoin.
    As-tu lu l'article dont j'ai donné le lien ?

    En l'état, ma requête commence réellement, pour le SGBD, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 
    FROM t_coordonner c
    Tu comprends bien que le SGBD se demande ce qu'il doit sélectionner !
    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
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    merci infiniment tjr iles reste des problèmes mais je te remercier bqp
    mais je veux pose une question si possible
    moi sure ma bd je jais un personne avec bqp des diplômes et jais 3 table la table "t_coordonner" la racin
    et la table "t_diplome" remplier par les déplombes
    et la table "t_coordonner_diplomes" comme vous connaisse bien un diplôme il peux a partiel de un ou plusieurs personne
    moi je veux mettre comme le truc de facebook quand tu clic la liste vas cherche sure les diplôme de la table et quand tu choisi un diplôme ile ouvre une autre possibilité de mettre un autre et si le diplôme il ne existe pas il va ajouter le diplôme sur la table "t_diplom" et prôné le code de diplôme ajouter et jointer le avec code de personne dans la table "t_coordonner_personnele"

    alors es-que c facile araire pour un débiteur ??

Discussions similaires

  1. Erreur SQL (1066) : Not unique table/alias
    Par reginato dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/07/2015, 18h03
  2. #1066 - Not unique table/alias:
    Par nexuspolaris dans le forum Requêtes
    Réponses: 12
    Dernier message: 28/05/2012, 15h49
  3. Error Code : 1066 Not unique table/alias
    Par Nyvad dans le forum Requêtes
    Réponses: 10
    Dernier message: 24/08/2010, 11h23
  4. Not unique table/alias
    Par yann123456 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/03/2010, 17h14
  5. #1066 - Not unique table/alias
    Par mafilek dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/04/2007, 16h38

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