2011-03-11 74 views
0

問題:MySQL SQL:在非標準化表上進行JOIN時更新?

我有兩個表,動物表和佔位符表。我想在動物桌上做一個更新 ,以便填寫適當的空白。動物 表未正確歸一化。

是否可以使用純MySQL SQL語句執行此操作,而不是在程序或腳本中循環使用 ?

例:

==這裏是 「之前」 ==

animal   placeholder 
1 | dog   1 | dog | log 
1 | snog   2 | cat | mat 
1 | _blank_  3 | bird | word 
2 | cat 
2 | sat 
2 | _blank_ 
3 | bird 
3 | heard 
3 | _blank_ 

==這裏是== 「後」

animal   placeholder 
1 | dog   1 | dog | log 
1 | snog   2 | cat | mat 
1 | log   3 | bird | word 
2 | cat 
2 | sat 
2 | mat 
3 | bird 
3 | heard 
3 | word 

問題:

你可以利用嗎?構造一條MySQL SQL語句,它將使用UPDATE將 「之前」轉換爲「之後」?

我假設它將有必要使用JOIN,因爲查詢需要知道放置佔位符的正確位置。

==解==

UPDATE動物 SET名稱=( SELECT名詞 FROM佔位符 WHERE( a.id = ID ) )WHERE a.name爲空;

+0

被問到的問題。 – dreftymac 2014-05-14 20:47:42

回答

1

也許類似這樣的東西:在非常規的數據表結構非規範化的數據從一個著名的開源項目打交道時

update animal a 
set name = (select col2 from placeholder where a.name is null and a.id = id) 
+0

差不多,但這是行不通的,因爲它取代了狗/ snog,貓/ sat和鳥/由於某種原因聽到了NULL。換句話說,UPDATE影響所有九行而不是僅僅打算三個。儘管感謝您的幫助。 – dreftymac 2011-03-11 18:12:22

+0

UPDATE動物 SET名稱=( SELECT名詞 FROM佔位符 WHERE( a.id = ID ) )WHERE a.name爲空; 現在工作,只需修改WHERE子句。再次感謝。 – dreftymac 2011-03-11 18:19:28