WHERE NOT EXISTS не работает при попытке вставить независимый от условия условие из другой таблицы

0

Я пытаюсь вставить значения в таблицу на основе условия из другой таблицы. Не основывается на игнорировании повторяющихся значений. Но я продолжаю получать синтаксическую ошибку. Не уверен, как действовать дальше.

То, что я хочу достичь, позволяет только добавлять пользователя в группу, если в независимой таблице пользователь не блокирует текущего пользователя:

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);

РЕДАКТИРОВАТЬ

Я пытаюсь вставить несколько строк за раз

  • 0
    WHERE NOT EXISTS вы можете использовать в операции INSERT SELECT
  • 0
    с INSERT SELECT я могу определить значения, которые будут вставлены? Эти значения определены и не существуют в настоящее время в таблице
Теги:
not-exists

2 ответа

2
Лучший ответ

Ты можешь сделать:

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
                     );
  • 0
    будет ли этот оператор работать с несколькими значениями для нескольких строк одновременно?
  • 0
    @alionthego. , , Я не уверен. Это отвечает на вопрос, который был задан. Если у вас есть другой вопрос, вы можете задать другой вопрос с соответствующими образцами данных и желаемыми результатами.
2

Если вы хотите 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 потому что у вас есть синтаксическая ошибка

  • 0
    Я пытаюсь вставить несколько строк одновременно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню