2015-09-08 24 views
3

我有3個表中的數據庫mysql更新查詢設置字段與另一個表的id的

1)視頻。

id name 
1  one 
2  two 
3  three 

2)session_has_video。

session_id video_id 
1    1 
1    3 

3)channel_has_session。

channel_id session_id videos 
1    1 

我想與所有的video.id更新channel_has_session.videos其中video.idsession.session_id。這意味着它應該是1,3

因此,更新後的表應該是這樣的

channel_has_session。

channel_id session_id videos 
1    1    1,3 

我試過這個查詢,但顯然沒有工作。

update channel_has_session set videos = (SELECT video_id FROM session_has_video where session_id=1) where session_id=1 and channel_id=1 

有什麼最簡單的方法可以在MySQL中這樣做嗎?

+1

我沒有看到在你的問題中提到的任何地方的「鑽」列。我也會說你應該避免在你的表中使用逗號分隔的值,這會使你的數據庫不關係(通常是一件壞事)。 –

回答

2

您可以將channel_has_session表加入包含每個session_id及其逗號分隔列表video_id值的臨時表中。然後使用此CSV列表在channel_has_session表上執行SET。試試這個查詢:

UPDATE 
    channel_has_session AS ch 
    INNER JOIN (
     SELECT session_id, GROUP_CONCAT(video_id) AS videos 
     FROM session_has_video 
     GROUP BY session_id 
    ) AS t on ch.session_id = t.session_id 
SET ch.videos = t.videos 
WHERE ch.channel_id = 1 AND ch.session_id = 1 
+0

是它爲我工作,有沒有什麼辦法只更新像'where channel_id = 1和session_id = 1'的特定記錄? –

0

一個可以實現它的方法是通過使用group_concat()功能,如:

UPDATE channel_has_session 
SET videos = (
    SELECT GROUP_CONCAT(DISTINCT video_id SEPARATOR ',') 
    FROM session_has_video 
    WHERE session_id = 1 
) 
WHERE session_id = 1 AND channel_id = 1 

但是,正如所說,在數據庫中使用逗號分隔值氣餒。

相關問題