1

この質問はlibpqxxに固有のものです。

次のような SQL ステートメントがあるとします。

string s = "SELECT a.foo, b.bar FROM tableOne a, tableTwo b WHERE a.X=b.X"

それを pqxx トランザクションに送信します。

trans.exec(s.c_str(), s.c_str());

結果フィールドの列の名前は?

つまり、1 行が選択されていると仮定すると、次のようになります。

pqxx::result::const_iterator row = result.begin();
int foo = row->at(FOO_COLUMN).as<int>();
int bar = row->at(BAR_COLUMN).as<int>();

FOO_COLUMN と BAR_COLUMN にはどのような値が必要ですか? それらはそれぞれ「a.foo」と「b.bar」でしょうか?

SQLステートメントが「as」キーワードを使用して変数の名前を変更した場合、列名は「as」に設定されたものになると思いますが、そうですか?

通常、私は SQL を試して列の値を出力しますが、ソフトウェアとデータベース自体の両方を開発しているため、そのテストを行うのは今のところ簡単ではありません。

ありがとう!

4

1 に答える 1

1

名前は と になりfooますbar。それらがクエリのエイリアスである場合、エイリアスが返され、元の名前は失われます。

結果の列名にテーブル名が含まれることはありません。

という名前が付けられた場合、は有効であり、テーブルがないにもかかわらず列を生成するtablename.colnameため、とにかくあいまいです。SELECT 1 as "foo.colname"foo.colnamefoo

列が適用されるときに列の元のテーブルを識別する方法は、テーブルpqxx::result::column_table(column_number)の を返すを呼び出すことoidです。テーブルの名前は直接利用できませんがpg_classoid.

また、列名は結果セット内で一意である必要はありません。SELECT 1 AS a, 2 AS aは有効で、まったく同じ名前の 2 つの列を生成します。

于 2013-06-08T15:24:32.983 に答える