【发布时间】:2016-08-19 02:10:06
【问题描述】:
我在 MYSQL 上有两张表,不知道 MYSQL 上是否有任何聚合函数 as array_agg() FROM postgreSQL。
TABLE 1 属性只有 8 条记录 表 2 记录了谁捕获了该财产,因此有时同一财产可能是 1 次或 n 次,我得到了这个 Qry:
SELECT p.id, pcb.users_admin_id as uid
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
-- GROUP BY p.id
id uid
200 1
200 80
202 1
202 80
211 1
211 10
211 81
215 10 ...
如果我使用 GROUP BY 部分,我会得到:
id uid
200 1
202 1
211 1
215 10 ...
丢失除 users_admin_id 的第一个值之外的任何其他数据。我知道我可以使用 postgreSQL 中的 array_agg() 函数实现我想要的结果,但我不知道如何在 MYSQL 上做到这一点。
这是我渴望的结果:
id uid
200 1,80 //an array, I don't mind about the separator, could be anything.
202 1,80
211 1,10,81
215 10 ...
我已经尝试过 UNION、GROUP BY、INNER JOIN...没有运气... 有什么指点吗?
更新
我正在使用这个人的many to many relations。希望它对其他人有用。我需要从第三个表中添加用户名,所以最终查询如下所示:
SELECT p.id, group_concat(pcb.users_admin_id) as uid, group_concat(ua.name) as uin
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
INNER JOIN users_admin ua ON ua.id = pcb.users_admin_id
group by p.id;
【问题讨论】:
标签: mysql