INSERT..ON DUPLICATE KEY UPDATE - 但不使用重复键进行比较

时间:2010-06-07 15:58:02

标签: mysql duplicate-data

我正在尝试解决我继承的问题,对不同数据源的处理不当。我有一个包含善恶用户的用户表。

create table `users`( 
  `user_id` int(13) NOT NULL AUTO_INCREMENT , 
  `email` varchar(255) , 
  `name` varchar(255) ,  
  PRIMARY KEY (`user_id`)
);

在此表中,主键当前设置为user_id。

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

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

我想要做的是更改用户表并添加一个列('evil'),默认为0.然后我想从我的'users_evil'表中转储数据,然后运行INSERT..ON DUPLICATE将此数据更新到第一个表中(设置'evil'= 1,电子邮件匹配)

问题是'PK'设置为user_id而不是'email'。 任何建议,甚至是成功实现这一目标的其他策略。

我可以运行此语句,但只在语句的持续时间内将另一列视为PK。

3 个答案:

答案 0 :(得分:2)

怎么样:

update users set evil=1 where email in (select email from users_evil);

答案 1 :(得分:2)

ALTER table add column...

UPDATE users set evil = 0;

UPDATE users u join users_evil ue ON ue.email = u.email and u.name = ue.name set evil = 1;    

您只需要更新用户表中的不良用户

答案 2 :(得分:0)

您可以执行表的外部联接,然后通过查找非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;