首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql中的另一个表中不存在的情况下进行更新?

问如何在mysql中的另一个表中不存在的情况下进行更新?
EN

Stack Overflow用户
提问于 2021-03-18 22:31:58
回答 1查看 29关注 0票数 0

这是我使用的数据库服务器:

服务器类型: MariaDB

服务器连接:不使用SSL

服务器版本: 10.5.8-MariaDB - MariaDB服务器

议定书版本: 10

我有一个用户表,其中一个值是"isGroupLeader“。

另一种情况是团体,那里的团体有领导者。

一个用户可以是多个组的连接者。

当我更换领导时,我想检查老领导是否仍然是另一组中的领导者。如果他不是另一组的领导者,我就把他的isGroupLeader设为假。

也是用伪码:

代码语言:javascript
复制
if (TheUser.userID is NOT in (groupLeader column of Groups table)) {
   TheUser.isGroupLeader = false;
}

如何在MySQL查询MariaDB中做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-18 22:57:22

您可以在users表中使用INSERT、UPDATE和DELETE到groups的触发器来维护groups列的状态。在插入时,将isGroupLeader标志的groupLeader设置为true。在更新时,您需要设置新groupLeader值的标志,并可能清除旧groupLeader值的标志(如果它们不是其他组的组领导)。在删除时,如果用户不再是任何组的领导者,则清除用户的isGroupLeader标志。注意,UPDATE和DELETE触发器必须在UPDATE/DELETE之后运行,以确保EXISTS子句与正在更新或删除的行不匹配。

代码语言:javascript
复制
CREATE TRIGGER addLeader AFTER INSERT ON groups
FOR EACH ROW
BEGIN
  UPDATE users 
  SET isGroupLeader = true
  WHERE userID = NEW.groupLeader;
END

CREATE TRIGGER updateLeader AFTER UPDATE ON groups
FOR EACH ROW
BEGIN
  UPDATE users 
  SET isGroupLeader = userID = NEW.groupLeader
                   OR EXISTS (SELECT * FROM groups WHERE groupLeader = OLD.groupLeader)
  WHERE userID IN(OLD.groupLeader, NEW.groupLeader);
END

CREATE TRIGGER deleteLeader AFTER DELETE ON groups
FOR EACH ROW
BEGIN
  UPDATE users 
  SET isGroupLeader = EXISTS (SELECT * FROM groups WHERE groupLeader = OLD.groupLeader)
  WHERE userID = OLD.groupLeader;
END

dbfiddle演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66700048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档