更改FK展示位置

时间:2017-08-29 07:18:19

标签: mysql sql

我有table1

id  | some_field
----------------
1   | text1
2   | text2
3   | text3

table2

id  | table1_id | some_field
----------------------------
1   | 3         | lorem ipsum
2   | 1         | lorem ipsum
3   | 2         | lorem ipsum

one to onetable1.id字段之间存在table2.table1_id个关系。

我需要将FK展示位置更改为table1(意味着在table2_id中创建table1并使用table2中的相关密钥填充它)以获得如下结构:

id  | table2_id | some_field
---------------------------
1   | 2         | text1
2   | 3         | text2
3   | 1         | text3

然后删除table1_id字段(但它与问题无关)。

问题是我可以像一个常见的SQL语句那样使用保存当前关系来更新所有行吗?

3 个答案:

答案 0 :(得分:2)

UPDATE statement可以更新一个或多个JOIN个表格中的行。

假设您已在table2_id中创建了专栏table1,则您的UPDATE查询应如下所示:

UPDATE table1
    INNER JOIN table2 ON table1.id = table2.table1_id
SET table1.table2_id = table2.id

这就是全部。它应该在table1中报告修改后的行数相同(或table2中的行,它们的行数应相同)。

答案 1 :(得分:2)

这是通过简单的连接完成的。

alter table t1 add column table2_id int;

update t1 join t2 on t1.id = t2.table1_id
set t1.table2_id = t2.id;

答案 2 :(得分:0)

如果我做对了

UPDATE table2  
JOIN table1 ON (table2.table1_id = table1.ID)
SET table2.ID = table2.table1_id
  , table2.table2_id = table2.ID 
  , table2.some_field = table1.some_field;