Bugs com DISTINCT e GROUP BY

30/06/2017

0

Bom dia , boa tarde e boa noite.

Iniciei a pouco tempo utilizar a ferramenta phpmyadmin, realizando um script em PHP para atualização de uma determinada tabela no banco , me deparei com um erro bizarro (mysqli_query(): (23000/1062): Duplicate entry 'A R BORGES' for key '<auto_key>')

Suponho que ele esteja dizendo que há duplicidade, só q o mais inconveniente é q, tanto GROUP BY como DISTINCT são utilizados para remover duplicidade e estou utilizando eles em meu script.

Em nenhum fórum consegui respostas plausíveis, espero que possam me ajudar.

Obrigado a todos.
Matheus Miranda

Matheus Miranda

Responder

Post mais votado

30/06/2017

Posta por favor o script executado e a estrutura das tabelas, "A R BORGES" já existe esse valor na tabela de destino ? A chave está configurada corretamente?

Bruno

Bruno
Responder

Mais Posts

30/06/2017

Matheus Miranda

CREATE TABLE `carteira_clientes` (
`id_carteira_clientes` int(11) NOT NULL,
`cod_grupo` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`cod_cli` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`raiz` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`cpf_cnpj` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`atendimento_valor` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`segmento_cliente` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`grupo_economico` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_cliente` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`divisao_gv` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_gv` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`login_gn_movel` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_gn_movel` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_gn_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`cpf_gestor_cliente` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_gestor_cliente` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`email_gestor_cliente` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`telefone_gestor_cliente` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`celular_gestor_cliente` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`diretoria` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`login_diretor` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_diretor` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`codigo_ura` int(50) DEFAULT NULL,
`fornecedor_site` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`ferista` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`consultor_1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`avaya_cr1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`skill_cr1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`login_cr1` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`email_cr1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`supervisor_cr1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`consultor_2` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`avaya_cr2` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`skill_cr2` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`login_cr2` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`email_cr2` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`consultor_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`telefone_consultor_fixa` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_mobilidade_movel` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_mobilidade_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`parque_movel_voz` int(10) DEFAULT NULL,
`parque_movel_m2m` int(10) DEFAULT NULL,
`parque_movel_total` int(10) DEFAULT NULL,
`service_manager` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`email_sm` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`tel_movel_sm` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_contas_movel` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_contas_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_cobranca_movel` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_cobranca_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`grupo_carteira_fixa` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `carteira_clientes`
ADD PRIMARY KEY (`id_carteira_clientes`),
ADD KEY `cpf_cnpj` (`cpf_cnpj`),
ADD KEY `raiz` (`raiz`),
ADD KEY `nome_cliente` (`nome_cliente`),
ADD KEY `cod_grupo` (`cod_grupo`),
ADD KEY `cod_cli` (`cod_cli`),
ADD KEY `email_sm` (`email_sm`);


ALTER TABLE `carteira_clientes`
MODIFY `id_carteira_clientes` int(11) NOT NULL AUTO_INCREMENT;


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

CREATE TABLE `grupo_economico` (
`id_grupo` int(11) NOT NULL,
`id_atendimento_valor` int(11) NOT NULL,
`id_divisao` int(11) NOT NULL,
`codigo_grupo` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_grupo` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `grupo_economico`
ADD PRIMARY KEY (`id_grupo`),
ADD KEY `fk_grupo_economico_atendimento_valor1_idx` (`id_atendimento_valor`),
ADD KEY `fk_grupo_economico_divasao_gv1_idx` (`id_divisao`);

ALTER TABLE `grupo_economico`
ADD CONSTRAINT `fk_grupo_economico_atendimento_valor1` FOREIGN KEY (`id_atendimento_valor`) REFERENCES `atendimento_valor` (`id_atendimento_valor`) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_grupo_economico_divasao_gv1` FOREIGN KEY (`id_divisao`) REFERENCES `divisao` (`id_divisao`) ON DELETE NO ACTION ON UPDATE NO ACTION;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function cadastra_grupo_eco($mysqli){

$consulta = $mysqli->query("
SELECT DISTINCT
cc.cod_grupo,
av.id_atendimento_valor,
dv.id_divisao
FROM
carteira_clientes cc LEFT JOIN grupo_economico ge
ON cc.cod_grupo = ge.cod_grupo

INNER JOIN atendimento_valor av
ON cc.atendimento_valor = av.atendimento_def

INNER JOIN divisao dv
ON cc.divisao_gv = dv.divisao_def
WHERE
ISNULL(ge.cod_grupo)
AND NOT ISNULL(cc.cod_grupo)
") or die ($mysql->error);
exit;

while($res = $consulta->fetch_assoc()){
$cod_grupo = $res['cod_grupo'];
$nome_grupo = addslashes ($res['grupo_economico']);
$id_atendimento = $res['id_atendimento_valor'];
$id_divisao = $res['id_divisao'];
$mysqli->query("INSERT INTO grupo_economico(cod_grupo,nome_grupo,id_atendimento_valor,id_divisao)
VALUES('$cod_grupo','$nome_grupo',$id_atendimento,$id_divisao)")or die ("s");
}


}
Responder

30/06/2017

Matheus Miranda

CREATE TABLE `carteira_clientes` (
`id_carteira_clientes` int(11) NOT NULL,
`cod_grupo` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`cod_cli` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`raiz` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`cpf_cnpj` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`atendimento_valor` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`segmento_cliente` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`grupo_economico` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_cliente` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`divisao_gv` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_gv` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`login_gn_movel` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_gn_movel` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_gn_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`cpf_gestor_cliente` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_gestor_cliente` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`email_gestor_cliente` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`telefone_gestor_cliente` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`celular_gestor_cliente` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`diretoria` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`login_diretor` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_diretor` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`codigo_ura` int(50) DEFAULT NULL,
`fornecedor_site` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`ferista` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`consultor_1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`avaya_cr1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`skill_cr1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`login_cr1` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`email_cr1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`supervisor_cr1` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`consultor_2` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`avaya_cr2` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`skill_cr2` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`login_cr2` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`email_cr2` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`consultor_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`telefone_consultor_fixa` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_mobilidade_movel` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_mobilidade_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`parque_movel_voz` int(10) DEFAULT NULL,
`parque_movel_m2m` int(10) DEFAULT NULL,
`parque_movel_total` int(10) DEFAULT NULL,
`service_manager` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`email_sm` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`tel_movel_sm` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_contas_movel` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_contas_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_cobranca_movel` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`analista_cobranca_fixa` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`grupo_carteira_fixa` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `carteira_clientes`
ADD PRIMARY KEY (`id_carteira_clientes`),
ADD KEY `cpf_cnpj` (`cpf_cnpj`),
ADD KEY `raiz` (`raiz`),
ADD KEY `nome_cliente` (`nome_cliente`),
ADD KEY `cod_grupo` (`cod_grupo`),
ADD KEY `cod_cli` (`cod_cli`),
ADD KEY `email_sm` (`email_sm`);


ALTER TABLE `carteira_clientes`
MODIFY `id_carteira_clientes` int(11) NOT NULL AUTO_INCREMENT;


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

CREATE TABLE `grupo_economico` (
`id_grupo` int(11) NOT NULL,
`id_atendimento_valor` int(11) NOT NULL,
`id_divisao` int(11) NOT NULL,
`codigo_grupo` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`nome_grupo` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `grupo_economico`
ADD PRIMARY KEY (`id_grupo`),
ADD KEY `fk_grupo_economico_atendimento_valor1_idx` (`id_atendimento_valor`),
ADD KEY `fk_grupo_economico_divasao_gv1_idx` (`id_divisao`);

ALTER TABLE `grupo_economico`
ADD CONSTRAINT `fk_grupo_economico_atendimento_valor1` FOREIGN KEY (`id_atendimento_valor`) REFERENCES `atendimento_valor` (`id_atendimento_valor`) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_grupo_economico_divasao_gv1` FOREIGN KEY (`id_divisao`) REFERENCES `divisao` (`id_divisao`) ON DELETE NO ACTION ON UPDATE NO ACTION;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function cadastra_grupo_eco($mysqli){

$consulta = $mysqli->query("
SELECT DISTINCT
cc.cod_grupo,
cc.grupo_economico,
av.id_atendimento_valor,
dv.id_divisao
FROM
carteira_clientes cc LEFT JOIN grupo_economico ge
ON cc.cod_grupo = ge.cod_grupo

INNER JOIN atendimento_valor av
ON cc.atendimento_valor = av.atendimento_def

INNER JOIN divisao dv
ON cc.divisao_gv = dv.divisao_def
WHERE
ISNULL(ge.cod_grupo)
AND NOT ISNULL(cc.cod_grupo)
") or die ($mysql->error);
exit;

while($res = $consulta->fetch_assoc()){
$cod_grupo = $res['cod_grupo'];
$nome_grupo = addslashes ($res['grupo_economico']);
$id_atendimento = $res['id_atendimento_valor'];
$id_divisao = $res['id_divisao'];
$mysqli->query("INSERT INTO grupo_economico(cod_grupo,nome_grupo,id_atendimento_valor,id_divisao)
VALUES('$cod_grupo','$nome_grupo',$id_atendimento,$id_divisao)")or die ("s");
}


}
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar