我有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 one
和table1.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语句那样使用保存当前关系来更新所有行吗?
答案 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;