3つのテーブルの結合を想像してみましょう。私はエイリアスで列の名前を変更したいと思います。 select文に他の13個のカラム名を記述することなく、何か方法があるのでしょうか?*を選択し、1つの列にエイリアスを作成します。
私は何を擬似コードで探していますが
SELECT * [rename user.login as username] from users join
(select * from statistics join accounts)
3つのテーブルの結合を想像してみましょう。私はエイリアスで列の名前を変更したいと思います。 select文に他の13個のカラム名を記述することなく、何か方法があるのでしょうか?*を選択し、1つの列にエイリアスを作成します。
私は何を擬似コードで探していますが
SELECT * [rename user.login as username] from users join
(select * from statistics join accounts)
あなたの提案構文はIMO、良いものです。実際には、それがデータベース言語Tutorial Dと非常によく似ています:
user RENAME (login AS username)
指定された名前を変更したものとuser
関係変数からのすべての14の属性を投影します。
同様に、チュートリアルDにはALL BUT
の投影演算子があります。
user { ALL BUT login }
あなたのケースでは13の属性の関係になります。
悲しいことに、SQLにはこれらの便利なショートカットはありませんでした。おそらく、早ければSELECT *
が得られたことは幸運であると考えなければなりません。私たちはもっと最近の時間にそれを許可されることはありません! SQLユーザーを表すグループは、SELECT * BUT <commalist>
型構文の提案をSQL標準委員会に提出しましたが、拒否されました。 SELECT *
is disliked on SO too!
select users.login as username, users.*
from users
です残念ながら列は2回表示されますが、あなたができることは何もありません。
では、それは次のようになります参加:
select u.login as username, u.*, s.*
from users as u, statistics as s
where u.user_id = s.user_id
"列は2回現れますが、何もできません" - 自然な結合を実行するために列の名前を変更したいと思われます(明示的結合SELECT *を使用したときに2回現れるカラムの問題を解決することになります。 – onedaywhen
とにかくプロダクションコードでは 'select * 'を使用しないでください。私は、13の列名を書くことは、この質問を書くよりも時間がかかり過ぎていると確信しています。 –
しかし、彼は新しいことを学ぶことはありません... – dani24