我有2个用户表,大致像这样。
users_old
| id | email | hash | salt |
+----+----------------+------+------+
| 1 | bob@email.com | 1234 | abc |
| 2 | jane@email.com | 5678 | def |
| 3 | josh@email.com | 9123 | ghi |
| 4 | mike@email.com | 4567 | jki |
users
| id | email | hash | salt |
+----+----------------+------+------+
| 1 | bob@email.com | 1234 | abc |
| 2 | jane@email.com | 8662 | zsq | <--- different
| 3 | josh@email.com | 9123 | ghi |
| 4 | mike@email.com | 4567 | jki |
| 5 | karl@email.com | 8912 | xrz | <--- new
如您所见,users_old包含ID,电子邮件,哈希和盐。但是-用户表的末尾包含相同的条目+新的条目,并且某些原始条目具有不同的哈希+盐。
我想做的是通过从用户表中添加新条目来更新users_old表,并查看哪些条目具有不同的哈希+盐组合,并将那些在表末尾也添加为新条目(即使电子邮件是一样,所以最终结果应该只是一张桌子
users_old
| id | email | hash | salt |
+----+----------------+------+------+
| 1 | bob@email.com | 1234 | abc |
| 2 | jane@email.com | 5678 | def |
| 3 | josh@email.com | 9123 | ghi |
| 4 | mike@email.com | 4567 | jki |
| 5 | karl@email.com | 8912 | xrz |
| 6 | jane@email.com | 8662 | zsq |
有没有一个查询可以做到这一点?
最佳答案
我想你要:
insert into users_old(email, hash, salt)
select email, hash, salt
from users u
where not exists (select 1
from users_old uo
where uo.email = u.email and uo.hash = u.hash and
uo.salt = u.salt
);
关于mysql - 比较2个表并插入不完全匹配的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46992454/