如何编写匹配多表关联特定条件的SQL UPDATE语句
多表关联数据库开发场景
表结构定义
所有表均已配置合规外键约束,且存储有对应业务数据,各表字段如下:
- Environment 表:字段包含 ID、CUSTOMER_ID、ALLOW_ACCESS
- CUSTOMER 表:字段包含 ID
- CUSTOMER_CARD 表:字段包含 ID、CUSTOMER_ID
- APPLICATION 表:字段包含 ID、NAME
- APP_ROLE 表:字段包含 ID、APPLICATION_ID、NAME
- COMBINE_TABLES 表:字段包含 ID、CUSTOMER_ID、CUSTOMER_CARD_ID、ENVIRONMENT_ID、APP_ROLE_ID
核心更新需求
对所有关联客户满足判定条件的Environment表行执行更新操作,将行内 ALLOW_ACCESS 字段值设置为1,判定条件满足任意一项即可触发更新:
- 该客户在 CUSTOMER_CARD 表中不存在任何关联条目
- 该客户虽在 CUSTOMER_CARD 表中存在关联条目,但 COMBINE_TABLES 表中不存在同时关联名称为Foo的应用、名称为Bar的应用角色的记录
当前尝试编写的筛选目标数据的SQL语句
SELECT * FROM ENVIRONMENT TE WHERE NOT EXISTS( SELECT 1 FROM COMBINE_TABLES CT INNER JOIN APP_ROLE AR ON CT.APP_ROLE_ID = AR.ID INNER JOIN APPLICATION A ON A.ID = AR.APP_ID WHERE TE.ID = CT.TENANT_ENV_ID AND A.NAME = 'Foo' AND AR.NAME = 'Bar' )
内容的提问来源于stack exchange,提问作者Alex Len
相关产品推荐
相关产品推荐

