mysql update query для установки поля с идентификатором другой таблицы

У меня есть 3 таблицы в базе данных

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 

Я хочу обновить channel_has_session.videos со всеми video.id где video.id находится в session.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?

Solutions Collecting From Web of "mysql update query для установки поля с идентификатором другой таблицы"

Вы можете присоединиться к таблице channel_has_session во временную таблицу, содержащую каждый session_id вместе с разделенным запятыми video_id значений video_id . Затем выполните SET в таблице channel_has_session используя этот список CSV. Попробуйте этот запрос:

 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 

Одним из способов достижения этой цели можно воспользоваться 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 

Но, как сказано, использование разделенных запятыми значений в вашей базе данных не рекомендуется.