Oracle Apex:基于ORDERS表更新CUSTOMERS表的业务需求实现
基于ORDERS表同步CUSTOMERS表的解决方案
前置条件
首先需要为CUSTOMERS表的EMAIL字段创建唯一约束(或唯一索引),确保能高效判断邮箱是否重复:
-- 适用于MySQL、PostgreSQL等主流数据库 ALTER TABLE CUSTOMERS ADD CONSTRAINT uc_customers_email UNIQUE (EMAIL);
分数据库实现代码
MySQL 版本
利用INSERT ... ON DUPLICATE KEY UPDATE语法实现"存在则更新、不存在则插入"的逻辑:
INSERT INTO CUSTOMERS (FIRST_NAME, LAST_NAME, EMAIL, NUMBER_OF_ORDERS) SELECT o.FIRST_NAME, o.LAST_NAME, o.EMAIL, 1 FROM ORDERS o ON DUPLICATE KEY UPDATE NUMBER_OF_ORDERS = NUMBER_OF_ORDERS + 1;
PostgreSQL 版本
使用INSERT ... ON CONFLICT ... DO UPDATE语法实现相同逻辑:
INSERT INTO CUSTOMERS (FIRST_NAME, LAST_NAME, EMAIL, NUMBER_OF_ORDERS) SELECT o.FIRST_NAME, o.LAST_NAME, o.EMAIL, 1 FROM ORDERS o ON CONFLICT (EMAIL) DO UPDATE SET NUMBER_OF_ORDERS = CUSTOMERS.NUMBER_OF_ORDERS + 1;
逻辑说明
- 从ORDERS表提取待同步的客户姓名、邮箱数据,将初始订单数设为1
- 若CUSTOMERS表中已存在对应邮箱的记录,自动触发更新:将该记录的
NUMBER_OF_ORDERS字段值加1 - 若CUSTOMERS表中无对应邮箱的记录,直接插入新行,
NUMBER_OF_ORDERS默认赋值为1
内容的提问来源于stack exchange,提问作者ckp7blessed
相关产品推荐
相关产品推荐

