LHR 0 Denunciar post Postado Julho 4, 2008 Olá pessoal, Estou com um problema. Possuo 3 tabelas (ITEM, ITEMANTIGO, MANUTENCAO) A tabela MANUTENCAO possui um campo chamado CODITEM, onde logicamente é colocado o CODIGO dos ITENS que se encontram OU na tabela ITEM OU na tabela ITEMANTIGO. Exemplo: -------------------------------------- CODITEM - DEFEITO 10 - Teste1 15 - Teste2 10001 - Teste3 20001 - Teste4 -------------------------------------- Então o unico meio que encontrei de fazer um relatorio disso, por exemplo, foi: select ITEM.NOMEITEM, MANUTENCAO.DATAMANUT from ITEM left join MANUTENCAO on (MANUTENCAO.CODITEMMANUT=ITEM.CODITEM) UNION select ITEMANTIGO.NOMEITEMANTIGO, MANUTENCAO.DATAMANUT from ITEMANTIGO left join MANUTENCAO on (MANUTENCAO.CODITEMMANUT=ITEMANTIGO.CODITEMANTIGO) Fazendo 2 selects e juntando-os pelo UNION. Porem como existem varias outras colunas na Query e que a tabela ITEM possui cerca de 100 mil registros, e a ITEMANTIGO cerca de 50 mil, a pesquisa esta sendo bem lenta já nesse computador. O outros são inferiores, o que causaria ainda mais demora. A duvida agora é: existe algum outro meio mais rapido de fazer essa consulta? Nao sei se ficou facil de entender, mas qualquer coisa, me deêm um toque. Obrigado desde já a todos. Até mais. Compartilhar este post Link para o post Compartilhar em outros sites
Discorpio 1 Denunciar post Postado Julho 4, 2008 Boa noite LHR. Tente assim: select ITEMANTIGO.NOMEITEMANTIGO, MANUTENCAO.DATAMANUT, ITEM.NOMEITEM from ITEMANTIGO left join (ITEM left join MANUTENCAO on ITEM.CODITEM = MANUTENCAO.CODITEMMANUT) on ITEMANTIGO.CODITEMANTIGO = MANUTENCAO.CODITEMMANUT Um abraço. Compartilhar este post Link para o post Compartilhar em outros sites
LHR 0 Denunciar post Postado Julho 7, 2008 Boa noite LHR. Tente assim: CODE select ITEMANTIGO.NOMEITEMANTIGO, MANUTENCAO.DATAMANUT, ITEM.NOMEITEM from ITEMANTIGO left join (ITEM left join MANUTENCAO on ITEM.CODITEM = MANUTENCAO.CODITEMMANUT) on ITEMANTIGO.CODITEMANTIGO = MANUTENCAO.CODITEMMANUT Um abraço. Olá Discorpio, Nesse método, ele está me exibindo uma consulta com TODOS os valores da tabela ITEM. Eu preciso na verdade que ele me exiba os valores da tabela MANUTENCAO, substituindo com o "join" o campo MANUTENCAO.CODITEMMANUT, pelo ITEM.NOMEITEM e/ou ITEMANTIGO.NOMEITEMANTIGO. Estou tentando alterar sua query pra ver se consigo chegar à isso. Obrigado pela ajuda até agora. Até mais! -------------------------------------------------------------------------------------------- Tentando aqui, eu fiz a seguinte consulta: select ITEM.nomedeitem as NOME, ITEMANTIGO.nomeitemantigo as NOME, MANUTENCAO.DATAMANUT from ITEM right join (MANUTENCAO left join ITEMANTIGO on (ITEMANTIGO.coditemantigo = MANUTENCAO.coditemmanut)) on (ITEM.coditem = MANUTENCAO.coditemmanut) E está quase perfeita! O unico problema é que existe 2 campos NOME (NOMEITEM, NOMEITEMANTIGO) e eu preciso que fosse apenas 1, como na outra SQL com UNION faz. Então tentei usar o "as NOME", porem a consulta retona tambem 2 colunas diferentes (NOME, NOME1). Teria algum jeito de unir essas 2 colunas? Abraço e até mais!!! Compartilhar este post Link para o post Compartilhar em outros sites
LHR 0 Denunciar post Postado Julho 7, 2008 Consegui! E vergonhosamente, era um erro RIDICULO. Tanto trabalho, por nada. Estou usando a consulta com UNION mesmo, com a única diferença de que troquei o LEFT JOIN pelo JOIN. Ficando assim: select ITEM.NOMEITEM, MANUTENCAO.DATAMANUT from ITEM join MANUTENCAO on (MANUTENCAO.CODITEMMANUT=ITEM.CODITEM) UNION select ITEMANTIGO.NOMEITEMANTIGO, MANUTENCAO.DATAMANUT from ITEMANTIGO join MANUTENCAO on (MANUTENCAO.CODITEMMANUT=ITEMANTIGO.CODITEMANTIGO) Agora está normalmente rápido. Obrigado pela ajuda. E malz pelo erro bobo. Até mais! Compartilhar este post Link para o post Compartilhar em outros sites