【发布时间】:2009-12-25 21:48:17
【问题描述】:
我有以下架构:
TABLE bands
-> band_id
-> property1
-> property2
-> ...
TABLE tracks
-> band_id
-> track_id
tracks 表通常将单个 band_id 映射到多个 track_id(每个 band 有多个轨道)。
我的目标是为符合特定条件(根据 property1、property2 等)的 band 构建格式为(band_id、property1、property2、...、[list of track_ids for that)的数据结构乐队])。
目前我在做
SELECT band_id, property1, property2, ..., track_id
FROM bands, tracks
WHERE bands.property1 = xyz;
这会为匹配的波段生成元组 (band_id, property1, property2, ..., track_id);每个轨道一个元组。目前,我采用这个并将给定波段的所有 track_ids 聚合(在我的非 sql 代码中)到一个列表中。但这似乎非常浪费,因为除了“propertyN”之外的所有值都会为每个单独的波段多次返回。
我想到的替代方法是首先获取匹配波段的 band_ids 和属性,然后为每个波段的 track_ids 发出单独的查询。但这反过来又意味着为每个波段发出单独的查询——而且有成千上万个,所以这可能不是很聪明。
有没有更好的方法来做到这一点?
我一直在研究 GROUP BY,这似乎是我感兴趣的一般方向,但我找不到一个聚合函数,它基本上会为表中的每个匹配记录返回一个值列表(在本例中为 track_ids)乐队。
【问题讨论】:
-
您能提供一个示例说明您希望输出的样子吗?
标签: sql mysql group-by aggregate