我有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/

10-11 02:44
查看更多