Colonne inconnue dans l'erreur "liste de champs" sur la requête de mise à jour MySQL

127

Je continue à recevoir l'erreur MySQL # 1054, lorsque j'essaye d'exécuter cette requête de mise à jour:

UPDATE MASTER_USER_PROFILE, TRAN_USER_BRANCH
SET MASTER_USER_PROFILE.fellow=`y`
WHERE MASTER_USER_PROFILE.USER_ID = TRAN_USER_BRANCH.USER_ID
AND TRAN_USER_BRANCH.BRANCH_ID = 17

C'est probablement une erreur de syntaxe, mais j'ai essayé d'utiliser une jointure interne à la place et d'autres modifications, mais je continue à recevoir le même message:

Unknown column 'y' in 'field list' 
Moi ici
la source

Réponses:

167

Essayez d'utiliser des guillemets différents pour "y" car le caractère de guillemet identifiant est le backtick ("` "). Sinon, MySQL "pense" que vous pointez sur une colonne nommée "y".

Voir aussi la documentation MySQL 5

tuergeist
la source
J'ai eu cela quand j'étais confus et j'ai utilisé des guillemets doubles au lieu de guillemets simples autour de mes chaînes.
tripleee
48

Mettez toute chaîne à passer au serveur mysql entre guillemets simples; par exemple:

$name = "my name"
$query = " INSERT INTO mytable VALUES ( 1 , '$name') "

Notez que bien que la requête soit placée entre guillemets doubles, vous devez placer toute chaîne entre guillemets simples.

ShoushouLeb
la source
Je vous remercie. J'essayais de comprendre pourquoi ma requête en PHP ne fonctionnait pas, tout ce que j'avais à faire était d'ajouter les guillemets simples.
RiCHiE
1
Je sais que c'est un ancien message, mais seriez-vous en mesure de répondre pourquoi vous devez mettre des citations?
RiCHiE
@RiCHiE il est généralement plus sûr d'utiliser des chaînes. En outre, il est plus logique pour moi de mettre une chaîne entre guillemets. Lorsque vous utilisez des fonctions comme SHA1, par exemple, vous mettez des guillemets dans le contenu à l'intérieur commeSHA1('$var')
George
Cela a fonctionné pour moi. J'ai d'abord essayé d'utiliser des backticks sans succès.
radbyx
Veuillez échapper correctement toutes les variables transmises aux requêtes! Utilisez simplement $name = mysqli_real_escape_string($name)pour échapper correctement les citations!
Le 'nton
16

Vous pouvez vérifier votre choix de guillemets (utilisez des guillemets doubles / simples pour les valeurs, les chaînes, etc. et des contre-indications pour les noms de colonne).

Étant donné que vous souhaitez uniquement mettre à jour la table, master_user_profileje vous recommande une requête imbriquée:

UPDATE
   master_user_profile
SET
   master_user_profile.fellow = 'y'
WHERE
   master_user_profile.user_id IN (
      SELECT tran_user_branch.user_id
      FROM tran_user_branch WHERE tran_user_branch.branch_id = 17);
Tim Cooper
la source
4

Dans mon cas, cela a été causé par un espace de fin invisible à la fin du nom de la colonne. Vérifiez simplement si vous utilisez vraiment "y" ou "y" à la place.

Aminah Nuraini
la source
2

Tout en travaillant sur une application .Net avec le code EF en premier, j'ai reçu ce message d'erreur en essayant d'appliquer ma migration là où j'avais une Sql("UPDATE tableName SET columnName = value");instruction.

Il s'avère que j'ai mal orthographié le columnName.

Master chef
la source
1

Je partage mon expérience à ce sujet. J'avais ce même problème. L'instruction d'insertion ou de mise à jour est correcte. Et j'ai également vérifié l'encodage. La colonne existe. Ensuite! J'ai découvert que je faisais référence à la colonne dans mon déclencheur. Vous devez également vérifier votre déclencheur pour voir si un script fait référence à la colonne avec laquelle vous rencontrez le problème.

Dean Chiu
la source
1

Je partage mon expérience à ce sujet. J'avais ce même problème. Ma requête était comme:

select table1.column2 from table1

Cependant, table1 n'avait pas de colonne colonne2.

user674669
la source
0

J'ai aussi la même erreur, le problème dans mon cas est que j'ai inclus le nom de la colonne dans la GROUP BYclause et cela a causé cette erreur. Donc supprimé la colonne de la GROUP BYclause et cela a fonctionné !!!

homme
la source
0

Si c'est hibernate et JPA. vérifiez que le nom et les colonnes de votre table référée ne correspondent pas

Poorna
la source
0

J'ai eu cette erreur lors de l'utilisation de GroupBy via LINQ sur une base de données MySQL. Le problème était que la propriété d'objet anonyme qui était utilisée par GroupBy ne correspondait pas au nom de la colonne de base de données. Correction en renommant le nom de propriété anonyme pour qu'il corresponde au nom de la colonne.

.Select(f => new 
{
   ThisPropertyNameNeedsToMatchYourColumnName = f.SomeName
})
.GroupBy(t => t.ThisPropertyNameNeedsToMatchYourColumnName);
Eternal21
la source
0

Une requête comme celle-ci provoquera également l'erreur:

SELECT table1.id FROM table2

Où la table est spécifiée dans la colonne select et non incluse dans la clause from.

hogarth45
la source