根据电子邮件地址映射两个mysql表

时间:2011-09-09 06:41:04

标签: mysql sql

我有两个mysql表

表1

id email  other fields

表2

id email other fields 

其中table1的id是auto increment mysql列。在表2中,id仅为primary key not NULL

表2的id如何出错。 现在两个表都有一些记录,我想在表2中使用与表1相同的ID。

让我们举个例子

表1

1 a@a.com
2 b@b.com 

表2

1 b@b.com
2 a@a.com 

如果我解雇查询

update 
  table2 
set 
  id=(select id from table 1 where email="a@a.com") 
where 
  email = "a@a.com"

我会收到错误,因为表2的id值已经为2。 现在我该如何解决这个问题?

我希望table2的id与基于电子邮件的table1相同。

3 个答案:

答案 0 :(得分:1)

据推测,你正在做一次性修复。进入phpMyAdmin,或您最喜欢的数据库编辑工具,从table2中删除PK约束。使用这些查询修复记录,然后重新添加PK约束。

答案 1 :(得分:1)

这个怎么样:

update table2 set email=(
case
when email='b@b.com' Then 'a@a.com'
when email ='a@a.com' Then 'b@b.com'
end)

答案 2 :(得分:0)

你可以做@rickythefox告诉你的事情,或者你可以通过两个问题达到你的目标:

  1. 运行查询,将table2.id固定数量添加到table1.id(例如500.000)
  2. 使用另一个减去固定数量的查询更新您的table2