Создать временную таблицу, где группы CONCAT расположены в своих собственных столбцах? - PullRequest
1 голос
/ 16 июня 2011

Я немного новичок в MYsql, и я озадачен тем, как это сделать.Я думаю, что мне нужно вставить свои результаты в TEMPORARY TABLE, но я не уверен.

Я хотел бы вывести отчет из своей базы данных, в котором будут показаны все музыкальные альбомы, которые есть в моей коллекции (album1,album2, album3) с отдельной колонкой для каждого формата, в котором доступен альбом (WAV, CD, кассета и т. д.).Я не уверен, как взять отношение «многие к одному» между format_types и альбомом и вывести отчет, в котором у каждого формата есть столбец, а у каждого альбома только одна строка.

У меня есть три таблицы (альбомы,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 голосов
/ 16 июня 2011

ниже должно дать вам то, что вам нужно.Я говорю «должен», потому что я не проверял это.

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`;

Дайте мне знать, если это работает: -)

...