我正在尝试解决我继承的问题,对不同数据源的处理不当。我有一个包含善恶用户的用户表。
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。
答案 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;