Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新外键的Mysql函数_Mysql_Function_Duplicates - Fatal编程技术网

更新外键的Mysql函数

更新外键的Mysql函数,mysql,function,duplicates,Mysql,Function,Duplicates,我有一个包含重复数据的表a,我想对其进行规范化。但是还有另一个表B,它引用表Aids。没有真正的外键。这只是事实。我想创建临时。表C并在重复键更新时使用填充,以从表A中删除重复项。但是,我丢失了一些ID,这些ID引用表B到表A 我想写一个函数,它的调用如下 ON DUPLICATE KEY UPDATE id = setNewId(`id`, VALUES(`id`)) 是否可以使函数setNewId()在更新dulicate键时将表C.id和B.id更新为新值 这将创建C,并删除unique

我有一个包含重复数据的表a,我想对其进行规范化。但是还有另一个表B,它引用表Aids。没有真正的外键。这只是事实。我想创建临时。表C并在重复键更新时使用填充,以从表A中删除重复项。但是,我丢失了一些ID,这些ID引用表B到表A

我想写一个函数,它的调用如下

ON DUPLICATE KEY UPDATE id = setNewId(`id`, VALUES(`id`))

是否可以使函数setNewId()在更新dulicate键时将表C.idB.id更新为新值

这将创建
C
,并删除
unique\u字段的所有重复值

CREATE TABLE C LIKE A;
ALTER TABLE C ADD UNIQUE INDEX (unique_field);
INSERT IGNORE INTO C
SELECT * FROM A;
创建
C
后,可以使用
a
C
之间的连接来查找相应的ID,并使用该ID更新
B

UPDATE B
JOIN A ON B.foreign_key = A.id
JOIN C ON C.unique_field = A.unique_field AND C.id != A.id
SET B.foreign_key = C.id;

完成后,放下
A
并将
C
重命名为
A

他甚至还没有C,巴尔马他说他要创建C,我想他知道怎么做。好吧,反正我把它添加到了答案中。是的,我最喜欢的一个电话,
插入忽略
。那个电话万岁:p。。。有人说它在5.7中被抛弃了。不确定,我仍然和你在一起。没有足够的时间去尝试。现在谢谢你。