0

我正在尝试解决我因对不同数据源处理不当而继承的问题。我有一个包含好用户和坏用户的用户表。

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 与第一个表中的不对应。

我想让我的所有用户都在一张桌子上,并简单地标记哪些是好的,哪些是坏的。

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

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

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

4

3 回答 3

2

那这个呢:

update users set evil=1 where email in (select email from users_evil);
于 2010-06-07T16:03:46.797 回答
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;    

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

于 2010-06-07T16:07:03.447 回答
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;
于 2010-06-07T16:08:06.770 回答