#mysql #sql
#mysql #sql
Вопрос:
Хорошо, у меня есть вышеупомянутый макет базы данных в MySQL, и я пытаюсь создать запрос, который получит всю информацию о фильме и будет красиво отформатирован.
Допустим, у меня есть следующая информация в моих таблицах
movie
id name
1 "Batman"
2 "Superman"
genre
id name
1 "Thriller"
2 "Horror"
language
id lang
1 "English"
2 "Spanish"
theatre
id name
1 "First Theatre"
2 "Second Theatre"
movie_genre
movie_id genre_id
1 1
1 2
2 2
movie_release
id language_id movie_id
1 1 1
2 2 1
3 1 2
theatre_release
movie_release_id theatre_id
1 1
2 2
3 1
3 2
И в идеале результат был бы примерно таким
movie.name genres releases
"Batman" "thriller, horror" English, Theatre One
Spanish, Theatre Two
"Spiderman" "Horror" Spanish, Theatre One, Theatre Two
моя попытка запроса
Select
movie.name
Group_Concat(genre.name) as genres
Group_concat(language.lang, group_concat(theatre.name)) as releases
from
movie
left join movie genre on movie.id = movie_genre.movie_id
left join genre on genre.id = movie_genre.genre_id
left join movie_release on movie_release.movie_id = movie.id
left join language on movie_release.language_id = language.id
left join theatre_release on theatre_release.movie_release_id = movie_release.id
left join theatre on theatre_release.theatre_id = theatre.id
Комментарии:
1. Как вы сказали
GROUP_CONCAT
, это ответ. Вы пробовали что-нибудь2. @Prdp да, я пытался выполнить групповое объединение, чтобы объединить все языки вместе, и групповое объединение внутри этого, чтобы сгруппировать все кинотеатры, в которых выпущен фильм на этом языке, но у вас не может быть вложенного группового объединения
3. Опубликуйте запрос, мы это исправим
4. @Prdp опубликовал мой запрос
5. SQL — это НЕ способ «красиво форматировать», ошибочно рассматривать его для такой задачи.
Ответ №1:
Вам не нужны вложенные GROUP_CONCAT
.
Используйте CONCAT
для объединения lang
amp; name
, затем добавьте GROUP_CONCAT
, чтобы получить результат
Select
movie.name
Group_Concat(genre.name) as genres
GROUP_CONCAT(CONCAT(language.lang,' , ',theatre.name) SEPARATOR ' | ') as releases
from ...
Комментарии:
1. Это дало бы мне что-то вроде «(КАЖДЫЙ ЯЗЫК), (КАЖДЫЙ ТЕАТР)», что сделало бы невозможным увидеть, какой язык соответствует какому театру
2. @user2827048 — проверьте обновление .. может дать вам лучшее представление