Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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_Duplicate Data - Fatal编程技术网

Mysql 在重复密钥更新时插入..-但不使用重复密钥进行比较

Mysql 在重复密钥更新时插入..-但不使用重复密钥进行比较,mysql,duplicate-data,Mysql,Duplicate Data,我正试图解决我继承的一个问题,即对不同数据源处理不当。我有一个用户表,其中包含好用户和坏用户 create table `users`( `user_id` int(13) NOT NULL AUTO_INCREMENT , `email` varchar(255) , `name` varchar(255) , PRIMARY KEY (`user_id`) ); 在此表中,主键当前设置为用户id 我有另一个表('users_evil'),它只包含邪恶的用户(此表中

我正试图解决我继承的一个问题,即对不同数据源处理不当。我有一个用户表,其中包含好用户和坏用户

create table `users`( 
  `user_id` int(13) NOT NULL AUTO_INCREMENT , 
  `email` varchar(255) , 
  `name` varchar(255) ,  
  PRIMARY KEY (`user_id`)
);
在此表中,主键当前设置为用户id

我有另一个表('users_evil'),它只包含邪恶的用户(此表中的所有用户都包含在第一个表中)-此表中的用户id与第一个表中的用户id不对应

我希望将所有用户放在一个表中,并简单地标记哪些是好的,哪些是坏的

我要做的是修改用户表并添加一列('evil'),该列默认为0。然后我想从我的“users_-evil”表中转储数据,然后使用此数据在第一个表中运行INSERT..ON DUPLICATE KEY UPDATE(在电子邮件匹配的位置将“evil”设置为1)

问题是“PK”设置为用户id,而不是“电子邮件”。 任何建议,甚至是成功实现这一目标的其他策略

我可以运行此语句,但仅在语句期间将另一列视为PK。

这是怎么回事:

update users set evil=1 where email in (select email from users_evil);
那么这个呢:

update users set evil=1 where email in (select email from users_evil);
您只需要更新users表中的坏用户


您只需更新users表中的坏用户即可执行表的外部联接,然后通过查找非空值来检测用户的坏位置:

UPDATE (users LEFT OUTER JOIN evil_users ON users.email = evil_users.email)
  SET users.evil=1
  WHERE evil_users.some_field IS NOT NULL;

您可以执行表的外部联接,然后通过查找非空值来检测用户的位置:

UPDATE (users LEFT OUTER JOIN evil_users ON users.email = evil_users.email)
  SET users.evil=1
  WHERE evil_users.some_field IS NOT NULL;

实际上,现在我想起来了,甚至不需要外部连接。关于没有外部连接的版本,请参见Imre L的答案。事实上,现在我想起来了,外部连接甚至不需要。请参阅Imre L的答案,了解一个没有外部连接的版本。我不知道您可以在更新过程中加入-这正是我发布到该版本的原因。谢谢你的回答。我不认为当你只运行一次这样一个简单的查询时,有一个临时索引有什么意义。你的方法更有意义。标记为正确,感谢您的帮助我不知道您可以在更新期间加入-这正是我之所以如此发布的原因。谢谢你的回答。我不认为当你只运行一次这样一个简单的查询时,有一个临时索引有什么意义。你的方法更有意义。标记为正确,感谢您的帮助这应该可以工作,但它似乎导致我的服务器崩溃和烧毁。我注意到你不能在mysql中进行解释更新?我的数据集并不庞大(大约20k行)。谢谢这应该可以工作,但它似乎导致我的服务器崩溃和烧毁。我注意到你不能在mysql中进行解释更新?我的数据集并不庞大(大约20k行)。谢谢