2013-06-21 81 views
1

我有兩個表這樣的:MySQL的條件加入/搜索替換

電影

id | value 
------------- 
1 | 10 
2 | 11 
3 | 12 
4 | 13 

演員

id | movie_value |type | value 
------------------------------- 
1 | 10   | movie | 21 
2 | 11   | movie | 22 
3 | 12   | movie | 23 
4 | 13   | series | 13 

沒有電影和演員之間的關係,我知道它很奇怪。我想要像這樣轉換電影表的「movie_id」。 有條件的行=類型/電影。

電影

id | movie_id 
------------- 
1 | 21 
2 | 22 
3 | 23 
4 | 13 

某種形式的搜索/替換數字。這可能在MySql上?

我詢問這是不工作:

UPDATE movies 
INNER JOIN actors ON movies.value = actors.movie_value AND actors.type='movie' 
SET id = actors.value 
+0

因爲這兩個演員和電影有現場ID,不會引擎感到困惑的不確定性,以你想要什麼ID更新(換句話說不該」 t ID是'movies.id'? – xQbert

+0

是的,它的困惑。但是電影和演員之間沒有關係。我想匹配movies.value = actors.movi​​e_value並將相同的ID替換爲movie.movi​​e_id。 – gnoxis

回答

0

試試這個

UPDATE movies m 
INNER JOIN actors a ON m.value = a.movie_value 
SET m.`value` = a.`value` 
WHERE a.type='movie' 

DEMO HERE

在查詢您忘記WHERE子句。

+0

他真的關心'actors.type'嗎? –

+0

不起作用。 movies.id = actors.id,這並不重要。 – gnoxis

+0

受影響的行:0.不起作用。 – gnoxis

0

這應該工作:

UPDATE movies, actors 
SET movies.id = actors.value 
WHERE movies.value = actors.movie_value AND actors.type LIKE 'movie%' 
+0

受影響的行:0.不起作用。 – gnoxis

+0

@gnoxis我想問題是在類型列中。我做了小小的更新。 –

0

首先歡迎到#1(:
因爲一個演員可以與許多電影和電視劇,以及電影或意甲有很多演員,我會建議你使用agregation這裏有一些方法,


Diagram1
這個例子(愚見)使事情變得更加清晰,讓您定義一系列的具體特點和電影;在這裏演員也可以作用於電影和系列


Diagram2
這是一個很簡單,並在一張表中總結電影和系列信息。必要時特殊性將存儲在分區表中。


我有整個腳本,如果你想要任何。 也許這不完全是你的目標,在這種情況下,你不應該忘記明確指出每個字段的表格。由於你正在處理兩個表,因此mysql不知道某個列(在你的例子中,id)來自哪裏。

問候,

萊昂納多