· 8 years ago · Feb 05, 2018, 01:36 AM
1-- CRIAR A TABELA QUE RECEBERA OS DADOS PROCESSADOS
2CREATE TABLE `USUARIOS_FINAL` (
3 `ID` INT(11) NOT NULL AUTO_INCREMENT,
4 `NOME` VARCHAR(50) NULL DEFAULT NULL,
5 `EMAIL` VARCHAR(50) NULL DEFAULT NULL,
6 `ID_STATUS` INT(11) NULL DEFAULT NULL,
7 PRIMARY KEY (`ID`)
8) COLLATE='utf8_unicode_ci' ENGINE=InnoDB AUTO_INCREMENT=1;
9
10
11-- CRIAR E POPULAR A TABELA COM DADOS ORIGINAIS DUPLICADOS
12CREATE TABLE `USUARIOS_ORIGINAL` (
13 `NOME` VARCHAR(50) NULL DEFAULT NULL,
14 `EMAIL` VARCHAR(50) NULL DEFAULT NULL,
15 `ID_STATUS` INT(11) NULL DEFAULT NULL
16) COLLATE='utf8_unicode_ci' ENGINE=InnoDB;
17
18INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('João', 'joao@dominio.com.br', 0);
19INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('João', 'joao@dominio.com.br', 1);
20INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('João', 'joao@dominio.com.br', 0);
21INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('João', 'joao@dominio.com.br', 0);
22INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('Pedro', 'joao@dominio.com.br', 1);
23INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('Pedro', 'joao@dominio.com.br', 0);
24INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('Pedro', 'joao@dominio.com.br', 0);
25INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('Ana', 'ana@dominio.com.br', 0);
26INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('Ana', 'ana@dominio.com.br', 0);
27INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('José', 'jose@dominio.com.br', 0);
28INSERT INTO `USUARIOS_ORIGINAL` (`NOME`, `EMAIL`, `ID_STATUS`) VALUES ('José', 'jose@dominio.com.br', 1);
29
30-- REMOVE A TABELA TEMPORARIA QUE SERA UTILIZADA NO PROCESSAMENTO, CASO EXISTIR
31DROP TABLE IF EXISTS USUARIOS_TEMP;
32
33-- CRIA UMA TABELA TEMPORARIA INSERINDO SOMENTE USUARIOS ATIVOS, NÃO DUPLICADOS
34CREATE TABLE USUARIOS_TEMP SELECT DISTINCT NOME, EMAIL, ID_STATUS FROM USUARIOS_ORIGINAL WHERE ID_STATUS = 1;
35
36-- INSER NA TABELA TEMPORARIA SOMENTE USUARIOS INATIVOS, NÃO DUPLICADOS (UTILIZA OS DADOS JA EXISTENTES COMO REFERENCIA PARA NAO INSERIR UM NOVO REGISTRO INATIVO DE UM USUARIO ATIVOS JA EXISTENTE)
37INSERT INTO USUARIOS_TEMP (NOME, EMAIL, ID_STATUS)
38 SELECT DISTINCT NOME, EMAIL, ID_STATUS FROM USUARIOS_ORIGINAL UO
39 WHERE ID_STATUS = 0
40 AND CONCAT(UO.NOME, UO.EMAIL) NOT IN (SELECT CONCAT(UA.NOME, UA.EMAIL) FROM USUARIOS_TEMP UA);
41
42-- POPULA A TABELA FINAL COM A LISTA DE USUARIOS PROCESSADA, E NAO PERMITE A INCLUSAO DE REGISTRO DUPLICADO NA TABELA FINAL, ISSO PERMITE QUE O MESMO PROCESSAMENTO POSSA SER REALIZADO DIVERSAS VEZES GARANTINDO A CONSISTENCIA DA TABELA FINAL
43INSERT INTO USUARIOS_FINAL (NOME, EMAIL, ID_STATUS) SELECT UT.NOME, UT.EMAIL, UT.ID_STATUS FROM USUARIOS_TEMP UT WHERE CONCAT(UT.NOME, UT.EMAIL) NOT IN (SELECT CONCAT(UF.NOME,UF.EMAIL) FROM USUARIOS_FINAL UF);
44
45-- REMOVE A TABELA TEMPORARIA QUE SERA UTILIZADA NO PROCESSAMENTO
46DROP TABLE IF EXISTS USUARIOS_TEMP;