我有两个大致如下的用户表。
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 ,电子邮件,哈希和 salt 。但是 - 用户表在末尾包含相同的条目+新条目,并且一些原始条目具有不同的散列+盐。
我要做的是通过添加用户表中的新条目来更新 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 |
是否有一个查询可以实现这一目标?
答案 0 :(得分:0)
我想你想要:
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
);