2016-12-04 26 views
0

我有一个由两个表组成的数据库,名为'朋友'和'数据'。 这里是他们的样子:如何按值在另一个表中排序值

朋友表:

+-----------------------------------+ 
| 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)| 
+----------------+ 

所以基本上,这些都是“阿尔法”的朋友结合在一起的服务器。在服务器上的朋友应该放在第一位。它应该按服务器排序!

谢谢!

+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

相关问题