mysql的新手,需要一些帮助!我有2个表 - 表A和表B,它们设置如下:
表A - event
。
Event | Date | Time
=====
1 | 2014-07-06 | 9am
2 | 2014-08-08 | 10am
3 | 2014-10-10 | 10am
表B - location
Event | Date | Description | Directions*
=====
1 | 2014-08-08 | Grand Canyon | bar
2 | 2014-10-06 | Devils Tower | foo
3 | 2014-07-06 | Pacific Park | foo
3 | 2014-07-06 | Universal Studios | foo
现在我遇到的麻烦是如何正确地重新排序或交换表B中的值 - 位置。根据表A -event。如何更新位置表以便正确更改?
基本上我需要找到所有先前的事件值并使用新的事件值更新它们。
这是表B的结果 - 我希望在表A事件发生变化时看到的位置。
表B - location
Event | Date | Description | Directions
=====
1 | 2014-07-06 | Pacific Park | foo
1 | 2014-07-06 | Universal Studios | foo
2 | 2014-08-08 | Grand Canyon | bar
3 | 2014-10-06 | Devils Tower | foo
我忘了提到我需要能够遍历并查找所有实例。以及
答案 0 :(得分:0)
如果您使用的是InnoDB存储引擎,则可以在外键约束定义上指定ON UPDATE CASCADE
规则:
ALTER TABLE `location`
ADD CONSTRAINT FK_location_event (event) REFERENCES event (event)
ON UPDATE CASCADE;
然后(只要会话中没有禁用FOREIGN_KEY_CHECKS),当您发出UPDATE语句来更改event
表中event
列的值时,location
表中的相关行{1}}表也将被修改。
例如,如果您发出以下声明:
UPDATE `event` SET `event` = 4 WHERE `event` = 1;
这大致相当于执行这两个陈述:
UPDATE `event` SET `event` = 4 WHERE `event` = 1;
UPDATE `location` SET `event` = 4 WHERE `event` = 1;
答案 1 :(得分:0)
我建议将日期和时间移到表B中,以防事件发生在2个不同时间的2个不同位置......现在你的数据暗示事件可能发生在多个地方,但它们必须发生在相同的日期和时间。
无论如何,如果您正在处理遗留表(并且您无法控制架构),请回答您的问题,您可以通过UI Controller代码执行此操作,或者您可以在表A上创建一个mysql触发器,更新表B日期......
如果您要询问现有数据......
您可以通过“日期”和#39;来加入更新声明。柱:
UPDATE location b
JOIN event a
ON b.Date = a.Date
SET b.Event= a.Event
该声明将更新您的位置'表'事件'你事件中的身份证明'表,日期字段匹配