Maison >développement back-end >tutoriel php >Pourquoi ma requête Postgresql renvoie-t-elle une erreur « La colonne n'existe pas » même si la colonne existe ?

Pourquoi ma requête Postgresql renvoie-t-elle une erreur « La colonne n'existe pas » même si la colonne existe ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-27 21:44:13797parcourir

Why Does My Postgresql Query Return a

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn