在下面的示例中,如何填充person_events表如图所示?
到目前为止我所拥有的:
insert into person_events
select p.id, null, null, null, null, null, null
from persons p
为什么你需要这张新表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
每次更改person_events
或person
数据时,您还必须更改events
表上的数据。因此,在规范化数据库上使用简单查询(如上所述)将是最佳解决方案。
你的这个方法之间缺少“值”,请你的更改查询,请在询问之前通过在sql中运行来检查它。这是一个简单的问题。
插入person_events值从p中选择p.id,null,null,null,null,null,null
试试这个:
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
为什么要创建person_events表格?如果你做的事情
SELECT tickets.person_id, events.id, events.date
FROM tickets INNER JOIN events on ( events.id = tickets.event_id )
这不是你想要的结果吗?