我是一个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
我想知道返回上述结果的最佳方法吗?
答案 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`;
让我知道它是否有效: - )