Рассмотрим синтаксис insert ... select
:
insert into quiz_status(status, user_id, quiz_id)
select 0, u.user_id, q.id
from (select distinct user_id from quiz_status) u
cross join quiz q
left join quiz_status qz on q.id = qz.quiz_id and u.user_id = qz.user_id
where qz.quiz_id is null
. Это работает путем генерации всех комбинаций пользователей и опросов, а затем left join
с использованием таблицы состояния для фильтрации по отсутствующим записям. В реальной жизни у вас, скорее всего, будет таблица users
, которую можно использовать вместо подзапроса select distinct
.
Если вам нужен только один пользователь, это проще:
insert into quiz_status(status, user_id, quiz_id)
select 0, 1, q.id
from quiz q
left join quiz_status qz on q.id = qz.quiz_id and qz.user_id = 1
where qz.quiz_id is null
Примечание: предположительно, id
- это последовательный столбец, поэтому я оставил его отдельно в insert
s.