group_concat(X)
为此使用聚合函数:
SELECt (a.LastName || " " || a.FirstName) AS AttendeeName , a.PhotoURI , group_concat(c.CompanyName) AS Companies , group_concat(c.CompanyId) AS CompanyIdsFROM Attendee AS aJOIN CompanyAttendeeRelation AS ca ON ca.AttendeeId = a.AttendeeIdJOIN Company AS c ON c.CompanyId = ca.CompanyIdGROUP BY a.LastName, a.Firstname, a.PhotoURI;
(使用表别名使其更短且更易于阅读。)
NULL值从结果中排除。手册:
所有非NULL值的串联
根据手册,和 中元素 的 顺序
是任意的:
CompanyIds``Companies
串联元素的顺序是任意的。
另请注意,“任意”与“随机”不同。
group_concat像其他聚合函数一样,按收到的顺序处理行集。没有any
ORDERBY,该顺序由执行的查询计划决定。有一个在关系数据库的表中没有的自然顺序(你可以不依赖于插入顺序 在所有
)。但是
group_concat(),同一
SELECt列表中的的两个实例均以 相同的
顺序处理行,因此in中的第一个ID
CompanyIds对应于中的第一个名称
Companies。
您可以
ORDER BY在子查询中强加您的订单。这是实现细节,但极不可能更改。喜欢:
SELECT (LastName || " " || FirstName) AS AttendeeName , PhotoURI , group_concat(CompanyName) AS Companies , group_concat(CompanyId) AS CompanyIdsFROM ( SELECt a.LastName, a.FirstName, a.PhotoURI, c.CompanyName, c.CompanyId FROM Attendee AS a JOIN CompanyAttendeeRelation AS ca ON ca.AttendeeId = a.AttendeeId JOIN Company AS c ON c.CompanyId = ca.CompanyId ORDER BY 1,2,3,4,5 -- or whatever you need ) AS subGROUP BY LastName, Firstname, PhotoURI;
关于(可选)序号的手册
ORDERBY:
如果ORDER BY表达式是常数整数K,则该表达式被视为结果集的第K列的别名(列从1到从左到右编号)。
使用
GROUP BY列表作为
ORDER BY最佳结果的前导表达式。
在对派生表 进行 排序 后 ,不要对其进行任何可能重新排列的操作(例如将子查询联接到另一个表等)。



