albert_assis
-
Total de itens
4 -
Registro em
-
Última visita
Posts postados por albert_assis
-
-
Saudações!
Montei o banco de simulação com 20.000 equipamentos, 50 propriedades e 200.000 propriedades de equipamentos (10 propriedades para cada equipamento.
O tempo de resposta do script com sub-query e duas restrições de propriedades foi de 32 segundos!! (Win7, i5, 3,2Ghz, 4GB Ram). Com apenas uma restrição demora apenas 0.2 segundos.
Sendo assim, acredito que a solução com sub-query não é uma boa opção por causa da performance.
Alguém tem alguma ideia melhor?
Muito obrigado!!
-
@Denis Courcy,
Fiz o teste conforme a sua sugestão mas ainda não consegui o resultado esperado. Desta forma retornam equipamentos que não atendem às restrições.
Consegui obter os resultados utilizando a sub-query abaixo, mas não sei o quanto isso vai influenciar na performance, pois em cada loop de sub-query toda a tabela será escaneada. Vou testar em um BD de simulação.
SELECT distinct e.id, e.nome FROM prop_num_equip pn JOIN equip e ON e.id = pn.EQUIP_id where pn.prop_id = 2 and pn.valor >220 and pn.EQUIP_id in (SELECT pn.EQUIP_id FROM prop_num_equip pn where pn.prop_id = 1 and pn.valor = 7.5)
Muito obrigado!!
-
Olá,
Tenho uma base simples para cadastro de propriedades de equipamentos (exemplo na imagem em anexo).
Como eu poderia selecionar, por exemplo, todos os equipamentos com Potencia>7.5 e Tensão =440?
Isso me parece simples, mas ainda não consegui fazer. Suponho que a modelagem esteja correta, logo confirmo a minha inexperiência com banco de dados!
No momento tenho a query abaixo, mas deve ter erros de lógica de "and" e "or".
SELECT e.nome FROM equipamentos e JOIN prop_equip pe JOIN prop p ON e.id = pe.equip_id and pe.prop_id = p.id WHERE p.id = 1 and pn.valor > 7.5 or p.id = 2 and pn.valor = 220;
Muito obrigado!!!
(Resolvido) Consulta impossível - modelagem errada ou não sei montar a query?
em MySQL
Postado · Editado por albert_assis
A consulta abaixo encontrou os equipamentos que atendem todas as restrições.
O JOIN é apenas para resgatar o nome do equipamento de sua respectiva tabela.
As restrições em "WHERE" trazem todos os equipamentos que atendam uma restrição.
As cláusulas "GROUP BY" e "HAVING COUNT =" selecionam apenas os equipamentos que atenderam todas as restrições, pois somente estes casos aparecem mais de uma vez no resultado.
O número 3 na expressão "HAVING COUNT(pn.EQUIP_id) =3;" tem que ser igual ao número de restrições.
Esta discussão sobre encontrar registros duplicados foi a referencia para chegar nesta solução.
Muito obrigado a todos!!
"O conhecimento dividido é multiplicado"