Comprendre l'erreur « La colonne n'existe pas » dans Postgresql
En essayant d'exécuter une requête Postgresql apparemment simple, les utilisateurs peuvent rencontrer une erreur affirmant que la colonne spécifiée n'existe pas. Cela peut être déroutant, surtout lorsque la colonne en question est connue pour être présente dans la base de données.
Enquête sur le problème
Une requête typique qui déclenche cette erreur ressemble à la suivant :
SELECT * FROM employee WHERE "lName" LIKE "Smith"
Cependant, le message d'erreur indique que la colonne "Smith" n'existe pas, ce qui est déroutant puisque la colonne réelle le nom est "lName".
Cause première de l'erreur
L'erreur provient d'un malentendu sur la façon dont Postgresql interprète les guillemets doubles ("") dans une instruction SQL. Dans Postgresql, les guillemets doubles entourent les identifiants entre guillemets, qui font référence à des objets de base de données tels que les noms de tables et de colonnes. Cependant, dans ce cas, les guillemets autour de "Smith" créent à la place une constante de chaîne.
Correction de la requête
Pour corriger le problème, la requête doit être modifiée pour citer correctement le nom de la colonne "lName":
SELECT * FROM employee WHERE "lName" LIKE 'Smith'
Ici, des guillemets simples (') sont utilisés pour encadrer la valeur 'Smith', créant une chaîne littérale à des fins de comparaison.
Considérations supplémentaires
Outre les citations, une autre source potentielle de confusion est le caractère générique manquant dans la comparaison LIKE. Habituellement, une opération LIKE inclut un caractère générique (%) pour correspondre à n'importe quel nombre de caractères. Dans cette requête, il pourrait être plus approprié d'utiliser :
SELECT * FROM employee WHERE "lName" LIKE 'Smith%'
Cela garantit que les lignes dont la valeur dans la colonne "lName" commence par "Smith" seront incluses dans l'ensemble de résultats.
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!