我有一些连接到多个网络/ VLans(A,B& C)的网络设备,以及刚刚连接到其中一个网络的其他设备。当我删除或替换网络时,我需要更新我的数据库以反映设备所附加的内容,所以我正在尝试编写一个mysql语句来执行此操作,但我遇到了各种路障。
我的表只有两个字段,不能有重复的记录。我的数据示例是
deviceID network
1 A
1 B
1 C
2 B
2 C
3 A
4 A
5 B
如何将网络A合并到网络B中,以便上表看起来像......
deviceID network
1 B
1 C
2 B
2 C
3 B
4 B
5 B
我最初的尝试只是set network = 'B' where network = 'A'
,然后是DELETE network 'A'
语句,但这会产生重复项,即使重复项很简短,也不允许该表重复。使用替代方法,我只是使用WHERE EXISTS
和各种FROM (SELECT)
语句继续运行失败的mysql语句。是否可以在单个mysql语句中执行?我需要两个吗?
感谢任何帮助。
答案 0 :(得分:10)
您可以将UPDATE IGNORE
与更新语句一起使用 - 这将跳过导致重复的任何更新。然后,您将使用DELETE
跟随此项以清除已跳过的行。例如:
UPDATE IGNORE mytable SET network = 'B' WHERE network = 'A';
DELETE FROM mytable WHERE network = 'A';
使用
IGNORE
关键字,即使更新语句也不会中止 更新期间发生错误。重复键冲突的行 发生不更新。将列更新为值的行 这将导致数据转换错误更新到最近 而是有效值。
答案 1 :(得分:5)
您可以考虑将三列作为左列,而不是有两列 (唯一键保持不变)
因此,每当移除/更换设备时,
然后将状态标记为0,
当然,为了检索正确的列表,需要status=1