从Oracle中提取Master-Detail数据,没有单独的行以获取详细信息

时间:2010-01-15 21:43:11

标签: sql oracle aggregate

好的,我试着四处寻找,但是无法想出什么查询,所以我想我会发一个问题。如何在不将主数据与每行详细数据重复的情况下撤回主/详细信息?

鉴于以下情况:

Master - Cars
=============
decimal  car_id (pk)
string   name
decimal  cost
decimal  doors

Child - Colors
=============
decimal color_id (pk)
decimal car_id (fk)
string  color

所以,鉴于以上数据,如果我有一辆红色,绿色和蓝色(我不做香槟),我通常做的事情,我的记录集中有3行回来。

是否有将所有“颜色”连接到一个字段中,或作为数组返回?那样我每辆车可以有1排?

2 个答案:

答案 0 :(得分:1)

这听起来像SQL joining question(我回答过一个问题。得到了一个很好的答案)

答案 1 :(得分:0)

在我看来,你的COLORS表试图成为一个参考和交叉表,但如果你有这样的话,那么:

select car_id, ltrim(sys_connect_by_path(color,','),',') colors 
  from 
   (select car_id, color, row_number() over (partition by car_id order by color) rn
          from colors 
       ) rn
  where connect_by_isleaf=1
  connect by prior rn+1=rn and prior car_id = car_id 
  start with rn=1
;

应该有效