首页 > 解决方案 > Postgresql:一行中多行的值

问题描述

我有以下数据库:

汽车:{[CarID、马力、品牌、HeadDesigner]}

设计汽车:{[CarID, DesID]}

设计师:{[DesID, 姓名]}

您应该注意,虽然每辆汽车只有 1 个 HeadDesigner,但多人可以设计汽车(就像在工作中一样)。

假设我的数据库中有 10 辆汽车。对于 CarID (1..9),DesignsCar 中的每个 CarID 只有一个 DesID。然而,对于 carID 10,我们有 3 个人在处理它(carID 在 DesignsCar 中有 3 个条目,因为 3 个人在处理它)。

说我这样做:

select *
from car c 
left outer join designscar ds on c.carid = ds.carid 
left outer join designer d on frb.persnr = r.persnr

这给了我 12 行,而我只想要 10 行。这给我 12 行的原因应该很清楚:对于 carID 10,我们有 3 个人在处理它(carID 在 DesignsCar 中有 3 个条目,因为 3 个人处理它)。

我希望我已经很好地解释了这个问题,所以我的问题来了:

如何修改上面的查询以便得到 10 行。对于 CarID 10,我希望将 3 位设计师写在一列中(例如,逗号分隔,但只要它在一列中就可以了)。

那可能吗?

标签: sqlpostgresql

解决方案


您需要汇总这些值。这是一种可能性:

select c.*, 
       array_agg(d.name) as designer_names
from car c left outer join
     designscar ds
     on c.carid = ds.carid left outer join
     designer d
     on frb.persnr = r.persnr
group by c.carid ;   -- allowed assuming `carid` is the primary key

推荐阅读