where not exists在尝试根据另一个表的条件独立插入时不起作用

vawmfj5a  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(449)

我试图根据另一个表中的条件将值插入到一个表中。不是基于忽略重复值。但我一直有语法错误。不知道如何进行。
我想要实现的是,只有在独立表中的某个用户没有阻止当前用户时,才允许将该用户添加到组中:

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

编辑
我试图一次插入多行

pu3pd22g

pu3pd22g1#

你可以做:

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

ie3xauqp2#

如果你想的话 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 ... VALUESWHERE 条件,因为您有语法错误

相关问题