2013-10-02 54 views
2

串我有三個表:逗號分隔從什麼FKS引用

1)名稱

IDname | Name 
------------- 
1  | Volk 
2  | Molk 
3  | Yolk

2)公司

IDcompany | Company 
------------------ 
1   | Lucellous 
2   | Monstrous

3)name_company,其具有多對一(表1)和兩個外鍵的一對一關係

IDname_company | IDname | IDcompany 
1    | 1  | 1 
2    | 2  | 1 
3    | 2  | 2

我需要一個查詢,這將使我:

IDresult | Name | Company 
-------------------------------------- 
1  | Volk | Lucellous 
2  | Molk | Lucellous, Monstrous 
3  | Yolk |

我該怎麼辦呢?我使用SQLite工作,也許以後我會切換到Firebird。

+0

如何創建一個函數來獲取以逗號分隔的公司名稱基於'IDname'? – Milen

+0

你使用哪個DBMS? Oracle和Postgres都支持通過串聯作爲列表的字符串聚合的概念。 –

回答

0

要從多個字符串中獲取逗號分隔的字符串,請使用group_concat函數。 字符串是無論是從子查詢返回的所有記錄:

SELECT IDname AS IDresult, 
     Name, 
     (SELECT group_concat(Company) 
     FROM company 
     WHERE IDcompany IN (SELECT IDcompany 
          FROM name_company 
          WHERE IDname = name.IDname)) 
FROM name 

或從GROUP BY定義的組中的所有記錄:

SELECT name.IDname AS IDresult, 
     name.Name, 
     group_concat(company.Company) 
FROM name 
LEFT JOIN name_company ON name.IDname   = name_company.IDname 
LEFT JOIN company  ON name_company.IDcompany = company.IDcompany 
GROUP BY name.IDname 
0

SQLite支持的GROUP_CONCAT()字符串聚合函數,請參閱http://www.sqlite.org/lang_aggfunc.html用在像查詢:

select id, group_concat(<string_column>) 
from <table> 
group by id; 

你需要替換自己的查詢。