@Senture

INSERT INTO вставить одним запросом разные значения, как?

Есть 3 таблицы:
users - имеет 2 поля username и id;
users_clans - имеет 3 поля user_id, clan_name и rep;
clans - имеет 1 поле name.

Мне необходимо в таблицу users_clans добавить такие данные:
user_id = 10
clan_name = если "Клан1", то поле rep = 1,
а если clan_name != "Клан1"(другие имена их может быть сотни), то поле rep = -1.

Я смог составить такой запрос:
INSERT INTO users_clans (user_id, clan_name, rep) 
VALUES ((SELECT id FROM users WHERE username = 'Maaax'), 'Клан1', 1), 
((SELECT id FROM users WHERE username = 'Maaax'), 
(SELECT name FROM clans WHERE name != 'Клан1'), -1)

Но он не работает из за: "Подзапрос возвращает более одной записи", это из за вот этого под запроса: "(SELECT name FROM clans WHERE name != 'Клан1')" и это логично, но я не понимаю как написать правильный запрос.
  • Вопрос задан
  • 216 просмотров
Решения вопроса 1
Vapaamies
@Vapaamies
В творческом кризисе
insert into users_clans
  (user_id, clan_name, rep) 
select
  u.id, c.name, case when c.name = 'Клан1' then 1 else -1 end
from
  users u,
  clans c
where
  1 = 1 -- условия соединения нет, подразумеваем декартово произведение
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Подзапрос возвращает более одной записи
Просто INSERT ... SELECT, без VALUES.

необходимо в таблицу users_clans добавить такие данные
У вас другие условия в запросах INSERT INTO.
Ответ написан
Ваш ответ на вопрос

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

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