背景:
在用户管理模块中,当Add User以及Update User时,因为对User的权限进行了设置,需要相应的更新User所属公司的权限配置。为了编码简单,所以最后使用了一个比较复杂的SQL来进行实现。
表介绍:
account表——记录公司信息
user_r表——记录公司下的User帐号信息
两张表通过列ACCOUNTNUMBER进行关联
SQL语句:
UPDATE account SET UFK_PERMISSION = REPLACE(REPLACE((CASE WHEN UFK_PERMISSION IS NULL THEN 'E1G1' ELSE UFK_PERMISSION END), 'E0', 'E1'), 'G0', 'G1') WHERE ACCOUNTNUMBER ='" + AccountNumber + "' AND EXISTS(SELECT user_r.* FROM user_r WHERE user_r.ACCOUNTNUMBER=account.ACCOUNTNUMBER AND user_r.TREATISE LIKE '%M1%N1%P1%');
要点说明:
A) CASE WHEN UFK_PERMISSION IS NULL THEN 'E1G1' ELSE UFK_PERMISSION END,类似Java的三元表达式——当UFK_PERMISSION为空时,结果为'E1G1',否则结果就是UFK_PERMISSION的内容。
B) REPLACE函数,三个参数:str1/str2/str3——对于str1,将时其中的str2替换为str3
C) EXISTS函数,判断括号中的子查询是否存在查询记录
以上SQL语句在MySQL中通过测试