Я пытаюсь вставить значения в таблицу на основе условия из другой таблицы. Не основывается на игнорировании повторяющихся значений. Но я продолжаю получать синтаксическую ошибку. Не уверен, как действовать дальше.
То, что я хочу достичь, позволяет только добавлять пользователя в группу, если в независимой таблице пользователь не блокирует текущего пользователя:
INSERT INTO users_to_groups(user_id, group_id)
VALUES (1,'A')
WHERE NOT EXISTS (SELECT * FROM users_to_users WHERE user_id_a=2 AND user_id_b=1 AND user_blocked=1);
РЕДАКТИРОВАТЬ
Я пытаюсь вставить несколько строк за раз
Ты можешь сделать:
INSERT INTO users_to_groups(user_id, group_id)
SELECT x.user_id, x.group_id
FROM (SELECT 1 as user_id, 'A' as group_id) x
WHERE NOT EXISTS (SELECT 1
FROM users_to_users utu
WHERE utu.user_id_a = 2 AND
utu.user_id_b = 1 AND
utu.user_blocked = 1
);
Если вы хотите INSERT
только одну строку, вы можете попробовать следующее:
INSERT INTO users_to_groups(user_id, group_id)
SELECT 1,'A'
FROM dual
WHERE NOT EXISTS
(SELECT * FROM users_to_users
WHERE user_id_a=2 AND user_id_b=1 AND
user_blocked=1);
Если вы хотите INSERT
получить реальный результат запроса, вы можете изменить SELECT
с помощью своей логики
Например:
INSERT INTO users_to_groups(user_id, group_id)
SELECT u.id,'A'
FROM users u
WHERE NOT EXISTS
(SELECT * FROM users_to_users
WHERE user_id_a=u.id AND user_id_b=1 AND
user_blocked=1);
Но вы не можете использовать INSERT INTO... VALUES
с условием WHERE
потому что у вас есть синтаксическая ошибка