2014-03-25 27 views
1

我有兩個表:選擇一個單元格一次,但一切

 groups     group_members 
    v-------------------------------v 
+----+------------+  +----+----------+------+ 
| id | group_name |  | id | group_id | name | 
+----+------------+  +----+----------+------+ 
| 1 | admin  |  | 1 | 1  | Dave | 
+----+------------+  +----+----------+------+ 
| 2 | moderator |  | 2 | 1  | Bob | 
+----+------------+  +----+----------+------+ 
| 3 | vip  |  | 3 | 2  | Sue | 
+----+------------+  +----+----------+------+ 
| 4 | user  |  | 4 | 2  | Jill | 
+----+------------+  +----+----------+------+ 
         | 5 | 2  | Jack | 
         +----+----------+------+ 
         | 6 | 3  | Bill | 
         +----+----------+------+ 
         | 7 | 4  | Sam | 
         +----+----------+------+ 

group_members具有group_ididgroups的外鍵引用。

我想獲得在一個組中找到的成員的名單,但也返回group_name的過程中。我只想在一個查詢中做到這一點。

我試過這個查詢,但它返回每一行的組名,我想看看它自己的行group_name

SELECT groups.group_name, 
     group_members.name 
FROM groups, 
     group_members 
WHERE group_members.group_id = groups.id 
     AND groups.id = 1 

結果是:

+-------------------+--------------------+ 
| groups.group_name | group_members.name | 
+-------------------+--------------------+ 
| admin    | Dave    | 
+-------------------+--------------------+ 
| admin    | Bob    | 
+-------------------+--------------------+ 

我想看到的:

either this |      or this | 
       v        v 
+-------------------+   +---------------------+ 
| groups.group_name |   | groups_members.name | 
+-------------------+   +---------------------+ 
| admin    |   | admin    | 
+-------------------+   +---------------------+ 
           | Dave    | 
+---------------------+   +---------------------+ 
| groups_members.name |   | Bob     | 
+---------------------+   +---------------------+ 
| Dave    | 
+---------------------+ 
| Bob     | 
+---------------------+ 

請問可不可以?

+0

這可以使用聯盟,我不知道如何在單個查詢如何做 –

+1

爲什麼?通過刪除列名來修改數據......您嘗試解決什麼問題?也許有更好的解決方法... –

回答

1
SELECT if(gm.name='',g.name,gm.name) as name 
FROM groups g 
     join (select group_id, name from group_members gm 
        union all 
        select 1 as group_id, '' as name) gm on 
     gm.group_id = g.id 
WHERE 
     groups.id = 1 

我們可以添加一個人工行,並選擇任一組名(附加行)或組成員的名字

0
SELECT groups.group_name  
FROM groups, 
     group_members 
WHERE group_members.group_id = groups.id 
     AND groups.id = 1 

UNION 

SELECT group_members.name 
FROM groups, 
     group_members 
WHERE group_members.group_id = groups.id 
     AND groups.id = 1 
0

這一個?

SELECT groups.group_name AS Name 
FROM groups JOIN group_members ON 
       group_members.group_id = groups.id 
WHERE groups.id = 1 
UNION 
SELECT group_members.name AS Name 
FROM group_members JOIN groups ON 
       group_members.group_id = groups.id 
WHERE groups.id = 1 
相關問題