这个SQL极难,绝对需要高手!!
CREATE TABLE IF NOT EXISTS T_ACC_ROLE (
ACC_ROLE_ID INT(11) NOT NULL AUTO_INCREMENT COMMENT '编号ID',
ROLE_ID int(4) NOT NULL COMMENT '角色ID',
PRIORITY int(4) default NULL COMMENT '优先权',
INFO int(4) default NULL COMMENT '信息',
PRIMARY KEY(ACC_ROLE_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS T_ACC_ROLE_NOR (
ACC_ROLE_ID INT(11) NOT NULL AUTO_INCREMENT COMMENT '编号ID',
ROLE_ID int(4) NOT NULL COMMENT '角色ID',
INFO int(4) default NULL COMMENT '信息',
PRIMARY KEY(ACC_ROLE_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
T_ACC_ROLE 数据
ACC_ROLE_ID ROLE_ID PRIORITY INFO
1 2 1 11
2 2 2 12
3 2 3 13
4 4 1 14
T_ACC_ROLE_NOR 数据
ACC_ROLE_ID ROLE_ID INFO
1 2 16
2 3 17
4 5 19
要采集这两个表的INFO,INFO在两个表中不会重复。但是T_ACC_ROLE 中有重复的ROLE_ID,这时候要PRIORITY 较小的信息,说白了是优先级别较高的信息。但是在T_ACC_ROLE_NOR 也有ROLE_ID,那么表T_ACC_ROLE_NOR 中的信息处于更高的优先级,那么就采用T_ACC_ROLE_NOR的信息。
算法过程:
例如:搜索表T_ACC_ROLE
有三个ROLE_ID=2的信息,取PRIORITY =1的信息。
但是在T_ACC_ROLE_NOR表中也有ROLE_ID=2的信息,那么T_ACC_ROLE 表的信息就是旧信息,不采用,使用T_ACC_ROLE_NOR 的信息。
最后结果是:
ROLE_ID INFO
2 16
3 17
4 14
5 19