kuzubov
@kuzubov

MySql — добавление N строк по условию

Добрый день.
Не могу идумать как сделать запрос в 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

Но если уже на какой то шот было установлено эта пара с персонажем — то у нас в таблице оказывается уже две записи на одну пару персонаж: шот.

Задача:
Сделать запрос который не просто добавляет одного персонажа на все шоты, а учитывает тот факт что на некоторых шотах уже есть такой персонаж назначенный. Грубо говоря надо сделать чтобы запись шот: персонаж была уникальной для пары — не повторялись много раз.
  • Вопрос задан
  • 3599 просмотров
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
В таблицах связей обычно делают первичный ключ на оба поля.
И insert ignore
Ответ написан
FloppyFormator
@FloppyFormator
Пока тут тихо и незаметно обсуждали составные ключи, в порядке развлечения предложу второй вариант:

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

Этот запрос не будет даже предпринимать попытки вставить неуникальную запись.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы