我有三个表:

1)姓名

ID名称|名称
-------------
1 |沃尔克
2 |莫尔克
3 |蛋黄

2)公司

IDcompany |公司
------------------
1 |夜光的
2 |滔天

3)name_company,与名称(表1)和两个外键具有多对一关系

IDname_company | ID名称| ID公司
1 | 1 | 1个
2 | 2 | 1个
3 | 2 | 2

我需要一个查询,它会给我这个:

结果姓名|公司
--------------------------------------
1 |沃尔克|夜光的
2 |民间夜光的
3 |蛋黄|

我该怎么做?我使用SQLite,也许以后再切换到Firebird。

最佳答案

要从多个字符串中获取逗号分隔的字符串,请使用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

10-06 14:28