0

紛らわしい選択を取得しています...結果、テーブル定義は次のとおりです。

CREATE TABLE modes (
               key INTEGER,
               mode INTEGER,
               channel INTEGER,
               name TEXT,
               short_name TEXT,
               def INTEGER,
               highlight INTEGER,
               catagory TEXT,
               subcatagory TEXT);

次の情報が入力されています。

sqlite> select * from modes;
  3|6|5|Green|G|0|255|a|b
  3|6|6|Blue|B|0|255|a|b
  3|9|1|Mode|Mode|0|255|a|b
  3|9|2|Auto Mode Speed|Speed|0|255|a|b
  3|9|3|Strobe|Strobe|0|255|a|b
  3|9|4|Red|R|0|255|a|b
  3|9|5|Green|G|0|255|a|b
  3|9|6|Blue|B|0|255|a|b
  3|9|7|Red2|R2|0|255|a|b
  3|9|8|Green2|G2|0|255|a|b
  3|9|9|Blue2|B2|0|255|a|b
  3|6|4|Red|R|0|255|a|b
  3|6|1|6|6|0|255|a|b
  3|6|2|Auto mode speed|speed|0|255|a|b
  3|6|3|Strobe|Strobe|0|255|strobe|b

下から 3 番目の行に注意してください: 3|6|1|6|6|0|255|a|b

私が選択した場合: SELECT * FROM modes where mode=6 and name="Mode" order by channel;

戻り値: 3|6|1|6|6|0|255|a|b

列 4 と 5 (name と short_name) は一致しないはずです。これらは 6 であり、一致する用語は「モード」です。一致文字列「Mode」を他の文字列に変更すると、期待どおりに機能します。「モード」は予約語ですか?または変数「Mode」を 6 に設定しましたか? この振る舞いがわかりません。

4

3 に答える 3

2

["]を使用する場合は列を意味するため、

name="Mode"

これは、列モードと同じ値を持つ列名で検索することを意味します。したがって、実際にコード上でmode=6およびname=6の場所を選択します。文字列を使用する場合は、["]ではなく[']を使用してください

私は自分のデータベースでそのコードを使おうとしています。

select * from products
where name="Mode"

そして、私はエラーが発生しました

ERROR:  column "Mode" does not exist
LINE 2: where name="Mode"
于 2013-02-21T03:35:01.883 に答える
1

他の誰かが探している場合、私は最終的にドキュメントでそれを見つけました。それは sqlite3 FAQにあります

于 2013-02-24T17:00:39.993 に答える
0

私はsqlite3に精通していませんが、modes.modeオブジェクトを取得してチェックしているname="Mode"を実行しているように見えます。

もしそうならSELECT * FROM modes where name="Mode" order by channel。あなたはそれがあなたにも与えるだけであることに気付くかもしれません3|6|1|6|6|0|255|a|b.

于 2013-02-21T03:23:40.473 に答える