MySQL更新クエリの「フィールドリスト」エラーの不明な列


127

この更新クエリを実行しようとすると、MySQLエラー#1054が発生し続けます。

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

おそらくいくつかの構文エラーですが、代わりに内部結合と他の変更を使用しようとしましたが、同じメッセージが表示され続けます。

Unknown column 'y' in 'field list' 

回答:


167

識別子の引用文字がバックティック(「 `」)であるため、「y」には別の引用符を使用してみてください。それ以外の場合、MySQLは「y」という名前の列を指すと「考える」。

MySQL 5のドキュメントもご覧ください。


文字列を混乱させ、一重引用符ではなく二重引用符を使用したときにこれが発生しました。
tripleee 2018年

48

mysqlサーバーに渡す文字列は一重引用符で囲みます。例えば:

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

クエリは二重引用符で囲みますが、文字列は一重引用符で囲む必要あります。


ありがとうございました。PHPでのクエリが機能しない理由を理解しようとしていましたが、必要なのは単一引用符を追加することだけでした。
RiCHiE 2016

1
私はこれが古い投稿であることを知っていますが、なぜあなたは引用符を入れなければならないのか答えてもらえますか?
RiCHiE

@RiCHiE文字列を使用する場合、通常はより安全です。また、引用符の間に文字列を置くことは私にとってより理にかなっています。たとえば、SHA1のような関数を使用する場合、内部のコンテンツに引用符を付けますSHA1('$var')
George

これでうまくいきました。最初に私は運が悪いのにバックティックを使ってみました。
radbyx

クエリに渡されたすべての変数を適切にエスケープしてください!$name = mysqli_real_escape_string($name)引用符を適切にエスケープするために使用してください!
Le 'nton

16

引用符の選択を確認する場合があります(値、文字列などには二重引用符/単一引用符を使用し、列名にはバッククォートを使用します)。

テーブルmaster_user_profileを更新するだけなので、ネストされたクエリをお勧めします。

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);

4

私の場合は、列名の末尾にある見えない末尾のスペースが原因でした。代わりに「y」または「y」を本当に使用しているかどうかを確認してください。


2

最初にEFコードで.Netアプリのビルドに取り組んでいるときに、Sql("UPDATE tableName SET columnName = value");ステートメントがある場所に移行を適用しようとすると、このエラーメッセージが表示されました。

columnNameのスペルを間違えたことがわかりました。


1

これに関する私の経験を共有するだけです。私も同じ問題を抱えていました。挿入または更新ステートメントは正しいです。エンコードも確認しました。列は存在します。その後!トリガーの列を参照していることがわかりました。また、トリガーをチェックして、問題のある列を参照しているスクリプトがないか確認してください。


1

これに関する私の経験を共有するだけです。私も同じ問題を抱えていました。私のクエリは次のようでした:

select table1.column2 from table1

ただし、table1にはcolumn2列がありませんでした。


0

私も同じエラーが発生しました。私の場合の問題は、GROUP BY句に列名を含めたため、このエラーが発生したことです。したがって、GROUP BY節から列を削除し、それが機能しました!!!


0

休止状態とJPAの場合。参照されたテーブル名と列を確認してください。


0

MySQLデータベースでLINQを介してGroupByを使用すると、このエラーが発生しました。問題は、GroupByによって使用されていた匿名オブジェクトプロパティがデータベースの列名と一致しないことでした。列名と一致するように匿名プロパティ名を変更することで修正されました。

.Select(f => new 
{
   ThisPropertyNameNeedsToMatchYourColumnName = f.SomeName
})
.GroupBy(t => t.ThisPropertyNameNeedsToMatchYourColumnName);

0

次のようなクエリでもエラーが発生します。

SELECT table1.id FROM table2

テーブルが列選択で指定されており、from句に含まれていない場合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.