web-dev-qa-db-fra.com

Colonne {Nom de table} de la relation {Nom de table} n'existe pas SQL State: 42703

Je reçois une erreur lors de l'exécution d'une requête de mise à jour avec le nom de la table spécifié avec le nom de la colonne:

UPDATE Temp SET Temp.Id='234',Temp.Name='Test'WHERE Id='245'

C'est l'erreur:

ERROR:  column "temp" of relation "temp" does not exist
LINE 1:      UPDATE Temp SET Temp.Id='23...
                               ^
********** Error **********

ERROR: column "temp" of relation "temp" does not exist
SQL state: 42703
Character: 24
4
user79097

Vous ne pouvez pas (et pas besoin) d'utiliser des alias de table (ou des noms de colonne qualifiés de table de table) dans la clause SET d'un UPDATE. Cela a même un sens, car vous ne pouvez mettre à jour qu'une seule table dans un seul UPDATE, il n'y a donc aucune ambiguïté dans les noms de colonne.

Heureusement, la documentation toujours utile explicitement mentionne votre cas:

Nom de colonne

Le nom d'une colonne dans la table nommée par table_name. Le nom de la colonne peut être qualifié avec un nom de sousfield ou un indice de tableau, si nécessaire. N'incluez pas le nom du tableau dans la spécification d'une colonne cible - par exemple, UPDATE tab SET tab.col = 1 est invalide.

Donc, la solution consiste simplement à supprimer temp. de la clause SET:

UPDATE temp SET id = '234', name = 'Test' WHERE id = '245'

Notes:

  • Enregistrez-vous vraiment des nombres comme texte? Si oui, pourquoi? C'est généralement une recette pour la catastrophe. Par exemple, comment prévenir quelque chose comme 'mkjcvnd7y78r3tgbhvcjh' Entrer dans votre colonne id?
  • La façon dont vous utilisez des noms d'objet commençant par des lettres majuscules est déroutante. Sans doubler son nom, votre table en réalité s'appelle temp par opposition à Temp. L'utilisation de celle-ci peut diminuer la lisibilité (en fonction de vos préférences et d'habitudes, bien sûr).
9
dezso