【问题标题】:WHERE NOT EXISTS not working when trying to insert based independent on condition from another tableWHERE NOT EXISTS 在尝试根据另一个表的条件独立插入时不起作用
【发布时间】:2018-12-13 18:09:14
【问题描述】:

我正在尝试根据另一个表中的条件将值插入到表中。不是基于忽略重复值。但我不断收到语法错误。不知道如何继续。

我想要实现的是,如果在独立表中用户没有阻止当前用户,则只允许将用户添加到组中:

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

编辑

我正在尝试一次插入多行

【问题讨论】:

  • WHERE NOT EXISTS 您可以在 INSERT SELECT 操作中使用
  • 使用 INSERT SELECT 我可以定义要插入的值吗?这些值正在定义中,当前不存在于表中

标签: mysql sql not-exists


【解决方案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
                     );

【讨论】:

  • 此语句是否可以同时处理多行的多个值?
  • @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 条件一起使用,因为您有语法错误

【讨论】:

  • 我正在尝试一次插入多行
猜你喜欢
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2016-10-22
  • 2012-11-03
  • 1970-01-01
  • 2011-10-08
相关资源
最近更新 更多