我有一张events
表,其中包含年份,与会者人数以及从location
表中查找该位置的位置。
tbl_events
+-----+--------------+------+-----------+--------+
| ID | LOCATION_ID | YEAR | ATTENDEES | RATING |
+-----+--------------+------+-----------+--------+
| 1 | 1 | 2014 | 44 | 6 |
| 2 | 2 | 2014 | 36 | 7 |
| 3 | 4 | 2014 | 51 | 7 |
| ... | ... | ... | ... | ... |
| 74 | 2 | 2015 | 59 | 6.5 |
| 75 | 4 | 2015 | 31 | 5 |
| 76 | 12 | 2015 | 66 | 8 |
| ... | ... | ... | ... | ... |
| 133 | 5 | 2016 | 71 | 8.5 |
| 134 | 32 | 2016 | 68 | 6.5 |
| 135 | 14 | 2016 | 59 | 7.5 |
| ... | ... | ... | ... | ... |
+-----+--------------+------+-----------+--------+
tbl_locations
+-----+-------------+
| ID | Name |
+-----+-------------+
| 1 | Falmouth |
| 2 | Plymouth |
| 3 | Exeter |
| 4 | Bristol |
| 5 | Bournemouth |
| 6 | Southampton |
| ... | ... |
| 99 | Edinburgh |
| 100 | Glasgow |
+-----+-------------+
我只记录了发生的事件,其中包括年份,地点,与会者和评级所需的信息。
我想添加缺失值行,以包含表中所有年份locations
表中的所有位置。
所以我认为(理想情况下)我需要在每年中嵌套一个遍历表的循环,并循环遍历location
表中的所有位置,并将缺失的行直接插入{ {1}}表,或者进入临时表,然后我可以将其插入到事件表中。
我想用几年加入事件和位置表并插入临时表的替代方案。然后在事件表中插入事件表中不包含的所有行。
欢迎任何其他想法,但我仅限于在MySQL中执行此操作。
理想情况下,我可以将其保存为程序并稍后重新运行。
答案 0 :(得分:0)
您可以cross join
地点和所有年份来获得完整的组合。他们刚刚在实际事件中加入他们,所以你在缺少事件的插槽中得到null
s(或其他一些自定义值)的行:
SELECT e.*
FROM tbl_locations l
CROSS JOIN (SELECT DISTINCT year FROM events) y
LEFT JOIN events e ON l.id = e.location_id AND y.year = e.year