51 votes

Table/alias non unique

Je reçois l'erreur ERROR 1066 (42000): Not unique table/alias:

Je n'arrive pas à trouver ce qui ne va pas avec elle.

SELECT Project_Assigned.ProjectID, Project_Title, Account.Account_ID, Username, Access_Type
FROM Project_Assigned 
JOIN Account 
  ON Project_Assigned.AccountID = Account.Account_ID
JOIN Project
  ON Project_Assigned.ProjectID = Project.Project_ID
where Access_Type = 'Client';

2 votes

Vous devriez afficher les schémas des tables. Vous introduisez de nombreuses colonnes sans référence à leur table, ce qui est acceptable si les colonnes sont uniques. Cependant, je vous suggère de commencer à aliaser les noms de table, et de toujours préfixer les colonnes avec l'alias de table lorsque vous effectuez une jointure. Cela peut sembler naïf, mais êtes-vous sûr que c'est la requête qui produit cette erreur ? Avez-vous essayé d'exécuter la requête directement dans la console mysql ou dans phpMyAdmin ?

0 votes

J'exécute toujours la requête mysql en terminal via la console mysql et j'ai essayé de la réparer suffisamment de fois pour savoir que c'est l'erreur qu'elle exécute.

33voto

Shef Points 21595

Votre requête contient des colonnes qui pourraient être présentes avec le même nom dans plus d'une table que vous référencez, d'où l'erreur non unique. Il est préférable de rendre les références explicites et/ou d'utiliser des alias de table lors de la jointure.

Essayez

    SELECT pa.ProjectID, p.Project_Title, a.Account_ID, a.Username, a.Access_Type, c.First_Name, c.Last_Name
      FROM Project_Assigned pa
INNER JOIN Account a
        ON pa.AccountID = a.Account_ID
INNER JOIN Project p
        ON pa.ProjectID = p.Project_ID
INNER JOIN Clients c
        ON a.Account_ID = c.Account_ID
     WHERE a.Access_Type = 'Client';

5 votes

@Shef - Avez-vous plus d'informations sur la raison pour laquelle les alias de table sont nécessaires dans cette requête ? Je n'ai pas été en mesure de reproduire le message d'erreur ici avec MySQL 5.0 :- ?

0 votes

Quelque chose à noter. Apparemment, j'utilise MySQL 5.5.9.

0 votes

En plus de la requête qui fonctionne ci-dessus, comment puis-je obtenir le prénom et le nom des clients à partir d'une table Client séparée avec le même Account_ID ?

0voto

Michael Berry Points 1

J'ai eu cette erreur, et la cause était une concaténation incorrecte de chaînes de caractères. Je joignais deux chaînes sql et j'ai oublié de mettre un espace entre elles.

0voto

user8321755 Points 17
 select persons.personsid,name,info.id,address
    -> from persons
    -> inner join persons on info.infoid = info.info.id;

7 votes

Jetez un coup d'œil à comment répondre et mettez à jour votre réponse pour fournir plus de détails. Plus précisément, il serait utile que vous expliquiez comment ceci résout le problème

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X