2017-08-29 22 views
2

table1更改FK放置

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 

table1.idtable2.table1_id字段之間one to one關係。

我需要FK位置改變到table1(手段table1創建table2_id並與相關鍵填充形成table2),以獲得結構是這樣的:

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

然後放下table1_id場(但不是相關到問題)。

問題是我可以像一個常見的SQL語句那樣使用它來更新所有行並保存當前關係?

+1

更新一個表,並刪除列顯然不能用單一的語句來完成。 – Serg

+0

'table2_id'值是否與表2中的當前'id'和'table1_id'值有某種關係?因爲我目前的樣本看不到。此外,聽起來很明顯,但是我們保證表格2中的*行最多隻有一行,對於任何特定的表格1行?如果不是,那應該如何處理? –

+0

@Serg,我現在和我要求'update'語句。 –

回答

2

UPDATE statement可以更新來自一個或多個012-表格的行。

假設您已經在table1創建列table2_id,你UPDATE查詢應該是這樣的:

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

這就是全部。在table1(或table2中,它們應該具有相同的行數)時,它應該報告修改的行數相同。

+0

謝謝,夥計。這就是我一直在尋找的。 –

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; 
+0

謝謝,那就是我一直在尋找的東西。我做了@axiac答案,因爲他是第一個。 –

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;