0

私はで作業しており、行を格納SQLite3 in .cppするためにを使用しています。すべて問題ありませんが、からstd::map<std::string, special_variant_type>の場合、列名がラッパーを保持しているように見えることがわかりました。SELECT(subqueries)

これらのクエリを比較します。

SELECT `name` FROM `sqlite_master` WHERE `type`='table'; // works as I expected

および(いずれかを選択)

// do not work as I expected but might work as expected...
SELECT `name` FROM (SELECT `name` FROM `sqlite_master` WHERE `type`='table');
SELECT [name] FROM (SELECT `name` FROM `sqlite_master` WHERE `type`='table');

問題:最初の1つは、装飾されていない列名をもたらします。したがって、列名はnameです。サブクエリから選択する2番目の場合、列名は変更されません。返さbackticks, square brackets [], double quotes "れる...必要な名前ラッパー...IMO、破棄されます。

これは予想される動作ですか?一貫性がないようです。ラッパーを保持するか、破棄してください...

PS列マップをペアリングしているときに、それらを破棄していますが、それでも...これが正しいかどうか疑問に思っています...

PPSsqlite3ライブラリとNavicatクライアントの両方で発生します。

クイックソリューション:3.7.14が壊れています。クライアントを新しいバージョンに更新してください!この問題が発生しているサードパーティソフトウェア内のDLLを置き換えます(ただし、念のためバックアップコピーを保持します)。

4

1 に答える 1

0

一貫しているようです:

$ sqlite3
SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table test(x);
sqlite> .headers on
sqlite> .mode columns
sqlite> SELECT `name` FROM `sqlite_master` WHERE `type`='table';
name
----------
test
sqlite> SELECT `name` FROM (SELECT `name` FROM `sqlite_master` WHERE `type`='table');
name
----------
test

とにかく、SQLiteは列名について保証しません。

結果に列名を適用するには、を使用ASしてエイリアスを定義します。

列にアクセスする最も信頼できる方法は、インデックスを使用することです。これにより、数式や重複する列名の問題を回避できます。

于 2013-03-15T09:04:20.910 に答える