创建临时表CONCAT GROUPS放在各自的列中?

时间:2011-06-16 16:36:24

标签: mysql concatenation one-to-many temp-tables

我是一个MYsql新手,我很难过如何做到这一点。我想我必须将我的结果插入到TEMPORARY TABLE中,但我不确定。

我想从我的数据库中输出一个报告,该报告显示我的收藏中的每张音乐专辑(album1,album2,album3),每个专辑的格式都有一个单独的列(WAV,CD,盒式磁带,等等)。我不确定如何在format_types和album之间建立多对一的关系,并输出一个报告,其中每个格式都有一列,每个专辑只有一行。

我有三个表(专辑,format_types和出现次数)

albums 
id      uuid
1       d2ec45e9-5fcc
2       949ebf32-8c95
3       98c7cc7e-ebe4
format_types
id  name
1   cassette
2   CD
3   DAT
4   WAV
album_occurrences
id  album_id format_type_id
1   1        1
2   2        2
3   3        3
4   2        3
5   3        1
6   1        2
7   1        3
8   1        4
9   2        4

我想要的结果是:

albums_by_format
album_id    format_name_1   format_name_2   format_name_3   format_name_4
1           Cassette        CD              DAT             WAV
2           NULL            CD              NULL            WAV
3           Cassette        NULL            DAT             NULL

我想知道返回上述结果的最佳方法吗?

1 个答案:

答案 0 :(得分:0)

以下内容应该为您提供所需。我说“应该”因为我没有测试过它。

SELECT `al`.`id`,
    (
    SELECT `ft`.`name`
    FROM `format_types` `ft`
    INNER JOIN `album_occurrences` `ao` ON `ft`.`id` = `ao`.`format_type_id`
    WHERE `ao`.`album_id` = `al`.`id`
    AND `ft`.`id` = 1
    ) `format_name_1`,
    (
    SELECT `ft`.`name`
    FROM `format_types` `ft`
    INNER JOIN `album_occurrences` `ao` ON `ft`.`id` = `ao`.`format_type_id`
    WHERE `ao`.`album_id` = `al`.`id`
    AND `ft`.`id` = 2
    ) `format_name_2`,
    (
    SELECT `ft`.`name`
    FROM `format_types` `ft`
    INNER JOIN `album_occurrences` `ao` ON `ft`.`id` = `ao`.`format_type_id`
    WHERE `ao`.`album_id` = `al`.`id`
    AND `ft`.`id` = 3
    ) `format_name_3`,
    (
    SELECT `ft`.`name`
    FROM `format_types` `ft`
    INNER JOIN `album_occurrences` `ao` ON `ft`.`id` = `ao`.`format_type_id`
    WHERE `ao`.`album_id` = `al`.`id`
    AND `ft`.`id` = 4
    ) `format_name_4`
FROM
`albums` `al`;

让我知道它是否有效: - )