1. ホーム
  2. sql

[解決済み] SQL select join: すべてのカラムに 'prefix.*' というプレフィックスを付けることは可能ですか?

2022-04-29 01:13:25

質問

SQLでこんなことが可能なのかと思っています。AとBの2つのテーブルがあり、Aテーブルでselect、Bテーブルでjoinを行ったとします。

SELECT a.*, b.* FROM TABLE_A a JOIN TABLE_B b USING (some_id);

テーブル A が 'a_id', 'name', 'some_id' というカラムを持ち、テーブル B が 'b_id', 'name', 'some_id' を持つ場合、クエリは 'a_id', 'name', 'some_id', 'b_id', 'name', 'some_id' というカラムを戻すことになります。すべてのカラムを個別にリストすることなく、テーブルBのカラム名をプレフィックスする方法はありますか?これに相当するのは

SELECT a.*, b.b_id as 'b.b_id', b.name as 'b.name', b.some_id as 'b.some_id'
FROM TABLE_A a JOIN TABLE_B b USING (some_id);

しかし、前述のように、すべての列をリストアップすることなく、だから、次のようなもの。

SELECT a.*, b.* as 'b.*'
FROM TABLE_A a JOIN TABLE_B b USING (some_id);

基本的には、"b.* が返すすべての列の前に 'something'" を付ける、というようなことです。これは可能ですか、それとも私は運が悪いのでしょうか?

編集

を使用しない場合のアドバイス SELECT * といったことは有効なアドバイスですが、私の文脈には関係ありません。ですから、今ある問題にこだわってください。

私の最終的なゴールは SELECT * を実行し、結果セットに含まれるカラムの名前から、どのカラムがテーブルAから来たもので、どのカラムがテーブルBから来たものかを判断できるようにする必要があります。 SELECT * .

解決方法は?

ここでは、2つの状況が考えられますね。まず、データベースに関係なく一般的に使用できる標準SQLがあるかどうかを知りたいとします。いいえ、ありません。2つ目は、特定のdbms製品に関して知りたい場合です。それなら、それを特定する必要があります。しかし、最も可能性の高い答えは、"a.id, b.id" のようなものが返ってくることでしょう。なぜなら、それがSQL式で列を特定するために必要な方法だからです。そして、デフォルトが何であるかを知る最も簡単な方法は、そのようなクエリを送信して、何が返ってくるかを見ることです。ドットの前に来る接頭辞を指定したい場合は、例えば "SELECT * FROM a AS my_alias" を使用することができます。