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

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

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

  1. INSERT INTO users_to_groups(user_id, group_id)
  2. VALUES (1,'A')
  3. WHERE NOT EXISTS (SELECT * FROM users_to_users WHERE user_id_a=2 AND user_id_b=1 AND user_blocked=1);

编辑
我试图一次插入多行

pu3pd22g

pu3pd22g1#

你可以做:

  1. INSERT INTO users_to_groups(user_id, group_id)
  2. SELECT x.user_id, x.group_id
  3. FROM (SELECT 1 as user_id, 'A' as group_id) x
  4. WHERE NOT EXISTS (SELECT 1
  5. FROM users_to_users utu
  6. WHERE utu.user_id_a = 2 AND
  7. utu.user_id_b = 1 AND
  8. utu.user_blocked = 1
  9. );
ie3xauqp

ie3xauqp2#

如果你想的话 INSERT 只能尝试一行,如下所示:

  1. INSERT INTO users_to_groups(user_id, group_id)
  2. SELECT 1,'A'
  3. FROM dual
  4. WHERE NOT EXISTS
  5. (SELECT * FROM users_to_users
  6. WHERE user_id_a=2 AND user_id_b=1 AND
  7. user_blocked=1);

如果你想的话 INSERT 一个真实的查询结果你可以改变 SELECT 陈述你的逻辑
例如:

  1. INSERT INTO users_to_groups(user_id, group_id)
  2. SELECT u.id,'A'
  3. FROM users u
  4. WHERE NOT EXISTS
  5. (SELECT * FROM users_to_users
  6. WHERE user_id_a=u.id AND user_id_b=1 AND
  7. user_blocked=1);

但你不能用 INSERT INTO ... VALUESWHERE 条件,因为您有语法错误

展开查看全部

相关问题