Добрый день.
Не могу идумать как сделать запрос в MySql — просто нехватает опыта.
Условие: есть три таблицы
1. Персонажи — char(id,name)
2. Шоты — shot(id,name)
3. Использование персонажей в шотах char_use(shot_id, char_id)
В таблице 3 записи лишь в случае если в каком то шоте есть какой то персонаж. Тоесть указываем пары id персонажа и локации которые надо связать вместе.
Если сейчас надо добавить одного персонажа для всех шотов:
insert into char_use (shot_id, char_id)
select id temp1, 9 temp2 // 9 — это id персонажа что добавляем
from shot
where 1
Но если уже на какой то шот было установлено эта пара с персонажем — то у нас в таблице оказывается уже две записи на одну пару персонаж: шот.
Задача:
Сделать запрос который не просто добавляет одного персонажа на все шоты, а учитывает тот факт что на некоторых шотах уже есть такой персонаж назначенный. Грубо говоря надо сделать чтобы запись шот: персонаж была уникальной для пары — не повторялись много раз.
Все равно не понял что такое ключ из двух полей и как это сделать?
Мне надо в итоге:
1,1
1,2
1,3
2,1
2,3
И т.п. Тоесть на шотах будут скольно персонажей и персы будут на нескольких шотах. Но не все на всех и потому надо такую табличку
Мне вот сейчас подсказали что это называется SET в python… Надо аналог сделать…
Да, так получилось… Но теперь mysql выдает ошибку в запросе — #1062 — Duplicate entry for primary key и дальше запрос не обрабатывается… Тоесть вот как пример мой выше — добавить перса во все шоты — щас запрос идет до первого дублирования и дальше ошибка и не выполняется…
Пока тут тихо и незаметно обсуждали составные ключи, в порядке развлечения предложу второй вариант:
INSERT INTO char_use (shot_id, char_id)
SELECT shot.id, 9
FROM shot
LEFT JOIN char_use ON shot.shot_id = char_use.shot_id
WHERE char_use.shot_id IS NULL
AND 1 = 1
Этот запрос не будет даже предпринимать попытки вставить неуникальную запись.