データ取得時に発生したエラー「ERROR 1054 (42S22)」の原因と解決方法

このQ&Aのポイント
  • データを取得しようとすると「ERROR 1054 (42S22)」というエラーが発生します。このエラーは、クエリ内で使用されているカラムが存在しない場合に表示されるものです。
  • エラーメッセージからわかるように、クエリ内で使用されている`a5`というカラムが存在しないため、エラーが発生しています。
  • このエラーを解決するためには、クエリ内で使用しているカラム名を正しく指定するか、存在しないカラムを使用している場合は修正する必要があります。また、文字列を比較する際は、シングルクォーテーションで囲むことも忘れずに行ってください。
回答を見る
  • ベストアンサー

ERROR 1054 (42S22) 原因不明です

idはintでプライマリー a5はchar(10)で日本語文字列を格納 データを取得しようとすると#1054エラーがでます。 admin-------- SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき` #1054 - Unknown column 'ã moniter-------- mysql> SELECT * FROM `aaa` WHERE `a5`=`あいうえおかき`; ERROR 1054 (42S22): Unknown column '縺ゅ>縺・∴縺翫°縺・ in 'where clause' `あいうえおかき`の日本語に問題があると思い半角データを1行だけ更新しました。 admin-------- SELECT * FROM `aaa` WHERE `a5`=`abcde` #1054 - Unknown column 'abcde' in 'where clause' moniter-------- mysql> SELECT * FROM `aaa` WHERE `a5`=`abcde`; ERROR 1054 (42S22): Unknown column 'abcde' in 'where clause' admin-------- moniter-------- SELECT * FROM `aaa` WHERE `a5` SELECT `a5` FROM `aaa` WHERE 1 SELECT * FROM `aaa` WHERE `id`=89584 成功

  • MySQL
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> SELECT * FROM `aaa` WHERE `a5`=`abcde` こうしてみるとか: SELECT * FROM aaa WHERE a5='abcde' 参考: http://dev.mysql.com/doc/refman/5.1/ja/identifiers.html http://dev.mysql.com/doc/refman/5.1/ja/string-syntax.html

taurin1000kg
質問者

お礼

解決できました。有難うございました。

その他の回答 (1)

回答No.2

逆引用符は列名等を使用する場合に使います、文字列は引用符で囲みます。

taurin1000kg
質問者

お礼

有難うございました。覚えておきます。

関連するQ&A

  • select文、asで定義した桁をwhereで使用可能?

    SELECT ( IF(substring(p.TDATE,1,6) = '200407' ,p.PRICE,999999999) ) as 'MONTH1' from TBL_PRICE p where MONTH1<999999999 ; ↑こんな感じで使いたいのですが、これはエラーに なります(これをそのまんま使用するわけではないので、 このSQL自体へのツッコミはとりあえずいいです) >ERROR 1054: Unknown column 'MONTH1' in 'where clause' asで定義した桁をwhereで使用することはできますか?

    • ベストアンサー
    • MySQL
  • SQLで他のテーブルに無いIDの抽出

    MySQLを使っています。 下記は、 1.テーブルaaaには、存在するidのものが、 2.テーブルbbbには、存在しない、 3.テーブルaaaのレコードを抽出したいものです。 "SELECT DISTINCT aaa.*" + " FROM aaa" + " WHERE (aaa.flag = false)" + " AND NOT EXISTS (SELECT * FROM bbb" + " WHERE (aaa.id = bbb.id) AND (bbb.flag = false))" ですが、実行すると、下記エラーがでます。 SQLException:Base table or view not found, message from server: \"Unknown table 'bbb' in where clause" どうすればよいのでしょうか?

    • ベストアンサー
    • MySQL
  • SQL抽出順番

    SQLの質問なんですが 以下のSQLがあるとします。 select カラムA、カラムC from test_table where in ('AAA','BBB','CCC'); ※条件はカラムAの値を使用しています。 結果が AAA 111 BBB 222 CCC 333 と出るとします。 下のように条件を変えたとき where in ('BBB','CCC','AAA'); BBB 222 CCC 333 AAA 111 と抽出と変わるようにしたいのですが、 (in句の左から順番にレコードが抽出したいです) 何か良い方法はありますでしょうか? rowid順で出力されてしまうのでしょうか? 以上です。 よろしくお願いします。

  • SQL文でエラーが出ます。

    MySQLの事で質問です。 テーブル1~4を結合してフィールド「comment」を検索 する時にフィールド「postDate」の降順でソートしたい のですがエラーが出ました。 「SQLコマンド」 select text from table1 union all select comment from table2 union all select comment from table3 union all select comment from table4 where match(commentIndex) against("検索ワード" in boolean mode) order by postDate desc; 試しに union all select comment from table2 union all select comment from table3 union all select comment from table4 の部分を削除して実行してみた所、成功しました。 後、order by postDate desc;のみ削除した場合でも成功しました。 エラーの内容はこれです↓↓ Unknown column 'postDate' in 'order clause' フィールド「postDate」は存在します。 (varchar型何ですが、それがいけないと思い date型やdatetime型と変えてみましたがダメでした) 何とかソートしたいのですがどうすればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • executeUpdateで変数を二つ読み込めるのでしょうか?

    String str ="DELETE FROM table1 where id="+bean.getid()+" and pass="+inbean.getpass();を実行すると com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'pass' in 'where clause' String string ="DELETE FROM table1 where id="+inbean.getid()+" and pass='"+inbean.getpass()+"';";を実行すると Unknown column 'pass' in 'where clause' となります。 st.executeUpdate(str)だと変数1つしかよみこめないのでしょうか。 st.executeQueryを使うべきなのですか? 分かる方がいましたらよろしくお願いします。

  • php mysql で WHERE句内に変数を入れる方法を教えてください。

    php初心者です。 お世話にになります。 id  content 1  テキスト1 2  テキスト2 3  テキスト3 4  テキスト4 5  テキスト5 上記のようなデータベースです。 下記の文で5行目のテキストを抽出する事は出来ています。 $query = 'SELECT * FROM tbl_batsu WHERE id = 5'; ランダム整数を生成し、5つの中から一つランダムにデータを抽出したいと考えています。 $num = rand(1, 5); $query = 'SELECT * FROM tbl_batsu WHERE id = $num'; 上記ですとエラーが出てしまいます。 Query failed: Unknown column '$num' in 'where clause' そんなカラムはありませんという意味だとは思いますが・・・ 初心者なもので的外れな質問になっているかも知れませんが、解決策が分かる方は是非ご教授頂ければありがたいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • Oracle SQLの、where句内の条件文について教えてください。

    Oracle SQLの、where句内の条件文について教えてください。 下記SQLの(1)と(2)の記述文を教えてください。 (1)例:owner = sys,admin ownerがsysまたは、adminを抽出 (2)例:column_name = '*aaa*' column_nameに「aaa」が含まれているデータ SELECT owner, table_name,column_name FROM all_tab_columns WHERE (1)(Ownerを複数指定)   and (2)(column_nameに、●●が含まれるデータ)

  • PCC-S-02201エラー

    こんにちは。 現在Oracle9 Pro*Cで開発をしているのですが、下記のSQLでコンパイルエラーが出てしまいます。エラー内容は 「PCC-S-02201, 記号"+"が見つかりました。」 SQLPlus上では問題なく検索されるのですが、うまくいきません。 何が問題なのでしょうか? EXEC SQL SELECT A_DAY FROM DB1 WHERE B_NUM = ((SELECT B_NUM FROM DB1 WHERE A_DAY = '20040722') + 1); B_NUMはNUMBER型です。

  • betweenで境界値が取得できない。

    連番の歯抜け値を取得するSQLを作りたいと思っています。 例えば、カラムAに、1,2,3,5,6,7,9,10(4と8が抜けている) と数値の入っているテーブルAがあるとします。 これに対して、 SELECT MIN(カラムA + 1) FROM テーブルA WHERE (カラムA + 1) NOT IN (SELECT カラムA FROM テーブルA) とSQLを投げた場合、4が取得できます。 これにbetween句を付与したいのですが、そうすると境界値が なぜか取れなくて困ってます。 具体的には、 SELECT MIN(カラムA + 1) FROM テーブルA WHERE (カラムA + 1) NOT IN (SELECT カラムA FROM テーブルA) AND BETWEEN 8 AND 10 とした場合、NULLが返ってきてしまいます。 普通、BETWEENは境界値も対象になるはずですが、何故このような 結果になってしまうのでしょうか? 修正点をご教授いただけないでしょうか? 宜しくお願いします。

  • 複数のテーブルの全てのカラムを一度に検索するには?

    検索対象のカラムがid(主キー)、bc1~bc40と41個あります。 1つのテーブルに41個のカラムを作り検索させると非常に時間がかかります。 それにインデックスを全部に付けたいですが16個までしかつけられないです。 なので、5つのテーブルにカラムを分けて全部のカラムにインデックスをつけて それぞれを検索させようと思っています。 テーブルが1つだけなら SELECT * FROM `bc` WHERE `bc1`='あいうえおかき' AND `bc2`='あいうえおかき' AND `bc3`='あいうえおかき' AND ・・・ `bc39`='あいうえおかき' AND `bc40`='あいうえおかき' ORDER BY `bc33` DESC LIMIT 0,50; のようにできますが、テーブルが複数の場合はどうしたらよいのでしょうか。 検索を試す前に下記ができるか試してみました。 SELECT COUNT(*) FROM (((`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id`) INNER JOIN `ddd` ON `ccc`.`id`=`ddd`.`id`) INNER JOIN `eee` ON `ccc`.`id`=`eee`.`id` エラーにはなりませんがカウント数が0になってしまいました。 SELECT COUNT(*) FROM (`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id` これは正確にできてカウント数100000 SELECT COUNT(*) FROM ((`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id`) INNER JOIN `ddd` ON `ccc`.`id`=`ddd`.`id` 4つ目のテーブルを入れたところから無理なようです。 他に良い方法はないのでしょうか。

    • ベストアンサー
    • MySQL