Maison >base de données >tutoriel mysql >Comment résoudre l'erreur SQL 1066 : « Table/alias non unique : 'utilisateur' » ?
Lorsque vous travaillez avec des requêtes de base de données, vous pouvez rencontrer l'erreur 1066, qui indique une table ou un alias non unique. Cela se produit généralement lorsque vous rejoignez la même table plusieurs fois sans spécifier les alias appropriés.
Considérez le scénario suivant : vous disposez d'une table d'articles avec des colonnes telles que author_id et approved_by qui font référence à des lignes dans la table user. Votre requête SQL vise à récupérer des données de la table d'articles et à récupérer des informations sur l'auteur et l'utilisateur qui a modifié l'article pour la dernière fois. Cependant, lorsque vous exécutez la requête, vous recevez l'erreur :
#1066 - Not unique table/alias: 'user'
Ce message d'erreur signifie que la table utilisateur a été jointe plusieurs fois dans la requête sans recevoir d'alias uniques.
Lorsque vous rejoignez la même table plusieurs fois, la base de données doit faire la distinction entre les différentes instances de cette table. Pour ce faire, vous devez attribuer des alias uniques à chaque instance. Ceci est particulièrement crucial lorsque vous récupérez des colonnes de plusieurs instances jointes, comme vous l'avez fait dans votre requête :
SELECT article.*, section.title, category.title, user.name, user.name FROM article INNER JOIN section ON article.section_id = section.id INNER JOIN category ON article.category_id = category.id INNER JOIN user ON article.author_id = user.id LEFT JOIN user ON article.modified_by = user.id WHERE article.id = '1'
Remarquez que vous avez utilisé l'alias d'utilisateur deux fois sans faire la distinction entre les deux instances de la table. Cela confond la base de données et conduit à l'erreur « Table/alias non unique ».
Pour résoudre ce problème, vous devez donner le table utilisateur un alias lorsque vous la rejoignez pour la deuxième fois. Cela différenciera les deux instances et permettra à la requête d'être exécutée avec succès.
Voici comment vous pouvez modifier votre code pour corriger l'erreur :
SELECT article.*, section.title, category.title, user.name, u2.name FROM article INNER JOIN section ON article.section_id = section.id INNER JOIN category ON article.category_id = category.id INNER JOIN user ON article.author_id = user.id LEFT JOIN user u2 ON article.modified_by = u2.id WHERE article.id = '1'
Dans cette requête mise à jour, la seconde L'instance de la table utilisateur reçoit l'alias u2. Cela permet à la base de données de différencier les deux instances et de résoudre l'erreur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!