tércio fernandes Postado Novembro 19, 2013 Denunciar Share Postado Novembro 19, 2013 Pessoal o comando inner join funciona em bases MyIsam? OBS: Desculpa a pergunta, é que to sem uma base de testes pra fazer essa avaliação. Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Novembro 19, 2013 Denunciar Share Postado Novembro 19, 2013 Sim. Perfeitamente. Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Novembro 19, 2013 Autor Denunciar Share Postado Novembro 19, 2013 (editado) Fala Dênis, e toda galera do ScriptBrasil bom dia.Olha so essa situação:Tenho duas tabelas lanc e lanc2, uma tem os lançamentos e a outra detalhamento do lançamento respectivamente. Mesmo assim, algumas colunas estão nas duas tabelas, como 'codigo_empresa', 'ano_lançamento', 'mes_lançamento', 'numero_lançamento'. Vejo que nem precisava essa duplicidade mas.....Então estou precisando da um Inner join pra pegar so a empresa que quero o mes e o ano.Estou dando um inner join:select * from lanc as t1 INNER join lanc2 as t2 ON (t1.numero_lançamento=t2.numero_lançamento) where t1.codigo_empresa = 45 and t1.mes_lancamento = 10 and t1.ano_lancamento = 2013; Nesse mês 10 tenho apenas 2 lançamentos, porém quando disparo esse inner join vem uma porrada de resultados trazendo empresas que não deveria mês que não está no filtro etc. Não o que estou fazendo de errado, ate criei uma tabela produtos e uma vendas pra fazer uns testes e pega direitinho, so traz o que ponho depois do WHERE, mas nessa de cima não vai...Alguma sujestao? Editado Novembro 20, 2013 por Denis Courcy colocar codigo no code Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Novembro 19, 2013 Denunciar Share Postado Novembro 19, 2013 Os dados NÃO filtrados estão vindo de T1?Creio que estejam vindo de T2.Verifique. Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Novembro 19, 2013 Autor Denunciar Share Postado Novembro 19, 2013 os não filtrados vem de t2, o de t1 vem certinho Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Novembro 19, 2013 Autor Denunciar Share Postado Novembro 19, 2013 exatamente Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Novembro 19, 2013 Autor Denunciar Share Postado Novembro 19, 2013 Também tentei: select * from lanc2 t2, lanc t1 where t2.numero_lacamento=t1.numero_lacamento and t2.codigo_empresa = 0045 and t2.mes_lancamento = 10 and t2.ano_lancamento = 2013; Porém também acontece a mesma coisa. :( Link para o comentário Compartilhar em outros sites More sharing options...
0 Flechaus Postado Novembro 19, 2013 Denunciar Share Postado Novembro 19, 2013 Lembrando que tabelas do MySQL no formato MyIsam não suportam integridade referencial. Se precisa deste tipo de integridade no seu banco, recomento o uso de InnoDB. Um abraço Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Novembro 20, 2013 Denunciar Share Postado Novembro 20, 2013 Lembrando que tabelas do MySQL no formato MyIsam não suportam integridade referencial.Se precisa deste tipo de integridade no seu banco, recomento o uso de InnoDB.Um abraçoA escolha do engine tem muito a haver com a performance e o tipo de uso que você quer.Tenho sistemas que funcionam muito bem com myisam. A integridade do banco é controlada via sistema. Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Novembro 20, 2013 Autor Denunciar Share Postado Novembro 20, 2013 Bom dia a todos. Não posso mudar a estrutura da tabela pois é um sistema já em produção. Mas vocês já viram isso acontecendo? Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Novembro 21, 2013 Denunciar Share Postado Novembro 21, 2013 Também tentei:select * from lanc2 t2, lanc t1where t2.numero_lacamento=t1.numero_lacamento and t2.codigo_empresa = 0045 and t2.mes_lancamento = 10 and t2.ano_lancamento = 2013; Porém também acontece a mesma coisa. :(Código do primeiro postselect * from lanc as t1 INNER join lanc2 as t2 ON (t1.numero_lançamento=t2.numero_lançamento) where t1.codigo_empresa = 45 and t1.mes_lancamento = 10 and t1.ano_lancamento = 2013;Se lanc2 tem mesmos campos de lanc você pode restringir a clausula ON do INNER JOIN.SELECT * FROM lanc t1 INNER JOIN lanc2 t2 ON t2.numero_lacamento=t1.numero_lacamento AND t1.codigo_empresa=t2.codigo_empresa AND t1.ano_lancamento=t2.ano_lancamento AND t1.mes_lancamento=t2.mes_lancamento WHERE t1.codigo_empresa = 45 and t1.mes_lancamento = 10 and t1.ano_lancamento = 2013;Cuidado. Pelo que percebi sua chave é a primeira condição. t2.numero_lacamento=t1.numero_lacamentoNão pode ser abolida nem trocar de lugar neste arranjo ou você estará fadado a um TABLE SCAN. Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Novembro 21, 2013 Autor Denunciar Share Postado Novembro 21, 2013 Genial hehehehe! Certinho Dênis, ta pegando agora o Inner Join. Eu não sabia que podia dar AND no ON. OBS: Não compreendi por certo. "Não pode ser abolida nem trocar de lugar neste arranjo ou você estará fadado a um TABLE SCAN." Se puderes exemplificar agradeço. No mais [Tópico Resolvido] Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Novembro 21, 2013 Denunciar Share Postado Novembro 21, 2013 Table scan é uma busca sequencial. Quando em um join para cada registro da tabela pai vai procurar em todos os registros da tabela filho, não importando se o que você quer esteja só no primeiro registro.Isto acontece quando você não usa índice ou usa índice errado.No Caso acima o índice esta no primeiro elemento da condição (3 condições). Caso você não o forneça ou caso esta condição passe a ser em outra posição ele deixará de buscar pelo índice e passará a buscar por table scan.Table scan normalmente SENTA o banco.Só pra fechar, as outras condições poderiam estar na cláusula where mas, são mais eficientes se estiverem na cláusula ON do JOIN. Link para o comentário Compartilhar em outros sites More sharing options...
0 tércio fernandes Postado Novembro 22, 2013 Autor Denunciar Share Postado Novembro 22, 2013 Entendi. Muito obrigado pela explicação Dênis. Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
tércio fernandes
Pessoal o comando inner join funciona em bases MyIsam?
OBS: Desculpa a pergunta, é que to sem uma base de testes pra fazer essa avaliação.
Link para o comentário
Compartilhar em outros sites
13 respostass a esta questão
Posts Recomendados