Кто-нибудь знает, можно ли написать запрос, который может произвести следующий вывод на основе приведенных ниже таблиц?
Мне удалось создать приведенные ниже результаты, создав три отдельных запроса и передав результат предыдущего запроса в следующий запрос. Но я надеялся на более эффективный способ.
Я хочу, чтобы этот результат использовался, используя ONE SQL?
baseball computer laptop
Jane Doe 5
Joe Blogs 8 8
Это таблицы, с которыми мне нужно работать:
таблица лиц
id first_name last_name
101 Jane Doe
576 Joe Blogs
таблица хобби
id hobby_type hours_spent
1 sports 5
2 technology 8
таблица hobby_types
id name
33 computer
39 baseball
45 laptop
people_hobbies join-table для человека и хобби
id person_id hobby_id
1 101 1
3 576 1
2 576 2
hobbies_hobby_types join-table для хобби и hobby_types
hobby_id hobby_type_id
1 39
2 33
3 45
Вы пытаетесь получить так называемую сводную таблицу .
Я боюсь, что в MySQL нет возможности сделать это с неограниченным количеством столбцов, но, возможно, я ошибаюсь. Используйте новое учебное ключевое слово, чтобы найти много информации по этой теме.
Как говорит AndreKR, вы не можете сделать это в одном select в MySQL с неограниченным количеством столбцов, но если значения столбца известны заранее, вы можете сделать это с помощью такого запроса:
select person_name,
sum(case hobby_type when 'baseball' then hours_spent else 0 end) baseball,
sum(case hobby_type when 'computer' then hours_spent else 0 end) computer,
sum(case hobby_type when 'laptop' then hours_spent else 0 end) laptop
from
(select p.first_name + ' ' + p.last_name person_name,
ht.name hobby_type,
h.hours_spent
from persons p
join persons_hobbies ph on p.id = ph.person_id
join hobbies h on ph.hobby_id = h.id
join hobbies_hobby_types hht on h.id = hht.hobby_id
join hobby_types ht on hht.hobby_type_id = ht.id) sq
group by person_name
Кстати, если структуры таблиц в вашей базе данных удалены аналогично тем, что приведены в примере, вы должны серьезно пересмотреть их. Проводимые часы обычно выделяются на уровне общения человека и хобби - здесь, похоже, вы принимаете общее количество часов, затрачиваемых за хобби, и выделяете их каждому человеку, что вызывает серьезный перерасчет. Аналогичная проблема также относится к отношениям Хобби-Типы к Хобби.