2016-12-04 4 views
0

私は、「友人」と「データ」という2つのテーブルからなるデータベースを持っています。 はここだ、彼らはどのように見えるか:値を別のテーブルの値で並べ替える方法

友人テーブル:

+-----------------------------------+ 
| UUID (varchar) | FRIEND (varchar) | 
+-----------------------------------+ 
|  Alpha  |  Beta  | 
+-----------------------------------+ 
|  Zulu  |  Zara  | 
+-----------------------------------+ 
|  Gamma  |  Alpha  | 
+-----------------------------------+ 
|  Charlie |  Alpha  | 
+-----------------------------------+ 

データテーブル(すべての友達が、サーバー上でオンラインになっているだけのものが含まれていません):だから

+----------------+ 
| UUID | SERVER | 
+----------------+ 
| Alpha | lobby | 
+----------------+ 
| Gamma | lobby | 
+----------------+ 
| Charlie| lobby | 
+----------------+ 

をどのようにしてこのようなResultSetを得ることができます:

+----------------+ 
| FRIEND| SERVER | 
+----------------+ 
| Gamma | lobby | 
+----------------+ 
| Charlie| lobby | 
+----------------+ 
| Beta | (null)| 
+----------------+ 

これは基本的にすべてです「Alpha」の友達は、そのサーバが接続されています。サーバー上にある友人が最初にいるはずです。サーバーごとにソートする必要があります。

ありがとうございます!

+0

結果セットの行を決定するための規則を説明してください。 –

答えて

1

トリックは'Alpha'の友人になっています。 union allを使用してこれを行うことができます。残りの部分はjoinです。

select a.friend, s.server 
from ((select friend from friends where uuid = 'Alpha' 
    ) union all 
     (select uuid from friends where friend = 'Alpha' 
    ) 
    ) a left join 
    servers s 
    on a.friend = s.uuid 
order by (s.uuid is null) desc; 
+0

ありがとうございます。 – dv02

関連する問題