2016-10-28 32 views
0

我需要從我的查詢中的每一行的子查詢中獲取一個表。MYSQL:獲取子列作爲列

比如我有2個表:公司員工:

**companies** 
company_id (int) 
company_name (char) 

**staff** 
staff_id (int) 
company_id (int) 
first_name (char) 
last_name (char) 
position (char) 

我希望得到公司全體員工作爲額外的列,這樣的事情:

SELECT c.company_name, 
(SELECT first_name, last_name, position FROM staff WHERE c.company_id = staff.company_id) as staff 
FROM companies c 

顯然,上述回報率查詢「操作數應該包含1列」錯誤。

有沒有辦法在MySQL中做到這一點?

+0

好吧,因爲加入將無法工作....你能顯示預期的結果嗎? – xQbert

+0

「我想讓所有公司的員工成爲額外的專欄」,所以如果一家公司有10名員工,您需要爲1列中的所有員工列出第一名,最後一名和職位? 'concat'&'Group_Concat'聽起來像你想要的功能 – xQbert

+0

對不起,它不適用於我,工作人員數據包括出生日期,department_id,狀態,照片等,所以我不能只是連接所有字段。 – AlecTMH

回答

2

也許你想加入表?

SELECT c.company_name, S.first_name, S.last_name, S.position 
FROM companies c 
INNER JOIN staff 
    ON c.company_id = staff.company_id 

或你想這一切在一列或東西...

SELECT c.company_name, concat(S.first_name, ' ', S.last_name, ' ', S.position) as staff 
FROM companies c 
INNER JOIN staff 
    ON c.company_id = staff.company_id 

仍不能確定你之後,所以也許在做什麼......

SELECT c.company_name, Group_concat(concat(S.first_name, ' ', S.last_name, '-', S.position Order by Last_name, First_name SEPARATOR ':') as staff 
FROM companies c 
INNER JOIN staff S 
    ON c.company_id = staff.company_id 
GROUP BY c.Company_name 

什麼上面應該做的是爲每一行連接第一個名字空間的姓氏破折號位置,然後合併由a分隔的行。這將爲表格中的每個公司創造1個且僅1條記錄。因此它不會引起任何1-M關係問題。因爲它會將公司/員工視爲1-1關係。如果需要,我們可以做的一代類似下面的子查詢...

SELECT c.company_name, S.StaffList 
FROM companies c 
LEFT JOIN (SELECT company_ID, Group_concat(concat(S.first_name, ' ', S.last_name, '-', S.position Order by Last_name, First_name SEPARATOR ':') as staffList 
      FROM staff 
      GROUP BY Company_ID) S 
    ON c.company_id = S.company_id 

這將導致公司&員工之間的關係,1-1。雖然staffList將會相當複雜...

+0

我不能,我真正的父查詢有很多列從不同的表加入,所以我需要一些層次結構 – AlecTMH

+0

也許我的第一個例子不好,想象一下你需要列出所有的經理並列出他的所有人。經理列有點不同。所以結果必須如下所示:經理1>員工1,員工2;經理2>員工3,員工4等你明白我的意思了嗎? – AlecTMH

+0

好的,所以你需要在mySQL中進行分層查詢,而不是那麼有趣。但SO有幾個例子:http://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query有沒有有限的幾個層次?如果是這樣的自我加入應該做的伎倆... – xQbert