2012-04-18 4 views
5

3つのテーブルの結合を想像してみましょう。私はエイリアスで列の名前を変更したいと思います。 select文に他の13個のカラム名を記述することなく、何か方法があるのでしょうか?*を選択し、1つの列にエイリアスを作成します。

私は何を擬似コードで探していますが

SELECT * [rename user.login as username] from users join 
     (select * from statistics join accounts) 
+2

とにかくプロダクションコードでは 'select * 'を使用しないでください。私は、13の列名を書くことは、この質問を書くよりも時間がかかり過ぎていると確信しています。 –

+0

しかし、彼は新しいことを学ぶことはありません... – dani24

答えて

3

あなたの提案構文は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!

4
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 
+0

"列は2回現れますが、何もできません" - 自然な結合を実行するために列の名前を変更したいと思われます(明示的結合SELECT *を使用したときに2回現れるカラムの問題を解決することになります。 – onedaywhen

関連する問題