Как выделить строки в столбцы? - PullRequest
0 голосов
/ 26 апреля 2019

Как в приведенном ниже примере заполнить таблицу person_events, как показано?

Что у меня так далеко:

insert into person_events
select p.id, null, null, null, null, null, null
from persons p

Ответы [ 4 ]

2 голосов
/ 26 апреля 2019

Зачем вам нужна эта новая таблица person_events?

У вас уже есть таблица tickets, сохраняющая соотношение между person и events.Таким образом, вы можете использовать следующий запрос, чтобы получить людей с соответствующей информацией о событии:

SELECT p.ID, e.ID, e.date 
FROM tickets t 
   INNER JOIN person p ON t.person_id = p.ID 
   INNER JOIN events e ON t.event_id = e.ID
WHERE p.ID = 1

демо на dbfiddle.uk

Youтакже необходимо изменять данные в таблице person_events каждый раз, когда вы что-либо изменяете в данных person или events.Таким образом, использование простого запроса (подобного приведенному выше) для нормализованной базы данных будет лучшим решением.

0 голосов
/ 26 апреля 2019

Попробуйте это:

insert into person_events
select p.id
    ,1
    ,MAX(CASE WHEN event_id = 1 then e.date end)
    ,2
    ,MAX(CASE WHEN event_id = 2 then e.date end)
    ,3
    ,MAX(CASE WHEN event_id = 3 then e.date end)
from persons p
JOIN tickets t ON t.person_id = p.id
JOIN events e ON t.event_id = e.id
GROUP BY p.id
0 голосов
/ 26 апреля 2019

Почему вы хотите создать табель person_events?Если вы делаете что-то вроде

SELECT tickets.person_id, events.id, events.date
FROM tickets INNER JOIN events on ( events.id = tickets.event_id )

Разве это не дает желаемого результата?

0 голосов
/ 26 апреля 2019

ваш метод this не имеет промежуточных значений, пожалуйста, запрос на изменение и проверьте его, запустив sql перед запросом.Это простой вопрос.

вставьте в значения person_events выберите p.id, null, null, null, null, null, null из персон p

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...