[oracle_br] DUVIDA COM SELECT
Mais uma duvida =) Tenho uma tabela com cerca de 100 mil registros e tenho uma associativa com cerca de 50 mil registros... na tabela associativa como existem 2 pk's os campos se repetem tenho que fazer um select entre as duas tabelas que selecionem os 100 mil registros da primeira porem dos 50 mil da segunda so selecione os que nao se repetem! Novo Yahoo! Cadê? - Experimente uma nova busca. http://yahoo.com.br/oqueeuganhocomisso [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] duvida com SELECT
Oi, Com as subconsultas você encarece porque está: 1) indo duas até a tabela. O dado já estava na sua mão, indo uma vez só até a tabela. Quando você faz uma consulta com group by, ela será "no mergeable", ou seja, será executado em separado, depois "juntada" com as outras; 2) fazendo joins desnecessários. Veja que havia 3 joins a mais ! Join é caro !! 3) usando outer joins, mais caros ainda que join e correndo de risco do otimizador fazer full em algumas tabelas ! [] Marcia On Fri, 18 Aug 2006 11:22:52 -0300, Thiago Menon <[EMAIL PROTECTED]> escreveu: > De: Thiago Menon <[EMAIL PROTECTED]> > Data: Fri, 18 Aug 2006 11:22:52 -0300 > Para: oracle_br@yahoogrupos.com.br > Assunto: Re: [oracle_br] duvida com SELECT > > > Entao deu certo sim. > > Agora queria saber se essa forma é melhor do que a com subqueries ? > > muito obrigado > Thiago > msn: [EMAIL PROTECTED] > > Marcia Bussolaro escreveu: > > >Oi Thiago, > > > > Tente assim: > > > >SELECT B.TIPO, C.MARCA, D.MODELO, > >COUNT(A.NUM_SERIE) AS TOTAL_GERAL, > >sum(decode(a.status, 'ES',1,0)) AS TOTAL_ESTOQUE, > >sum(decode(a.status, 'IN',1,0)) AS TOTAL_INSTALADO, > >sum(decode(a.status, 'DF',1,0)) AS TOTAL_DEFEITO > > FROM TBL_EQUIPAMENTOS A, > > TBL_EQUIP_TIPOS B, > > TBL_EQUIP_MARCAS C, > > TBL_EQUIP_MODELOS D > > WHERE A.ID_TIPO = B.ID > > AND A.ID_MARCA = C.ID > > AND A.ID_MODELO = D.ID > > GROUP BY B.TIPO, C.MARCA, D.MODELO, a.status > > ORDER BY B.TIPO, C.MARCA, D.MODELO, a.status > > > > Como eu não testei ... pode precisar de algum ajuste ... > > > >[] > >Marcia > > > > > >On Fri, 18 Aug 2006 09:16:34 -0300, Thiago Menon <[EMAIL PROTECTED]> > >escreveu: > > > > > > > >>De: Thiago Menon <[EMAIL PROTECTED]> > >>Data: Fri, 18 Aug 2006 09:16:34 -0300 > >>Para: Oracle Grupo > >>Assunto: [oracle_br] duvida com SELECT > >> > >> > >>Olá, > >> > >>Gostaria de saber se alguem pode me ajudar com um seguinte select > >> > >>tenho uma tabela TBL_EQUIPAMENTOS com os campos chave ID_TIPO, > >>ID_MARCA, ID_MODELO, NUM_SERIE e STATUS campo normal. > >> > >>preciso montar um SELECT to totalize por STATUS do EQUIPAMENTO. > >> > >>Hj eu faço o seguinte : > >> > >>SELECT B.TIPO, C.MARCA, D.MODELO, > >> COUNT(A.NUM_SERIE) AS TOTAL_GERAL, > >> NVL(E.TOTAL,0) AS TOTAL_ESTOQUE, > >> NVL(F.TOTAL,0) AS TOTAL_INSTALADO, > >> NVL(G.TOTAL,0) AS TOTAL_DEFEITO > >>FROM TBL_EQUIPAMENTOS A, > >> TBL_EQUIP_TIPOS B, > >> TBL_EQUIP_MARCAS C, > >> TBL_EQUIP_MODELOS D, > >> (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL > >> FROM TBL_EQUIPAMENTOS > >> WHERE STATUS = 'ES' > >> GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) E, > >> (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL > >> FROM TBL_EQUIPAMENTOS > >> WHERE STATUS = 'IN' > >> GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) F, > >> (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL > >> FROM TBL_EQUIPAMENTOS > >> WHERE STATUS = 'DF' > >> GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) G > >>WHERE A.ID_TIPO = B.ID > >>AND A.ID_MARCA = C.ID > >>AND A.ID_MODELO = D.ID > >>AND A.ID_TIPO = E.ID_TIPO(+) > >>AND A.ID_MARCA = E.ID_MARCA(+) > >>AND A.ID_MODELO = E.ID_MODELO(+) > >>AND A.ID_TIPO = F.ID_TIPO(+) > >>AND A.ID_MARCA = F.ID_MARCA(+) > >>AND A.ID_MODELO = F.ID_MODELO(+) > >>AND A.ID_TIPO = G.ID_TIPO(+) > >>AND A.ID_MARCA = G.ID_MARCA(+) > >>AND A.ID_MODELO = G.ID_MODELO(+) > >>GROUP BY B.TIPO, C.MARCA, D.MODELO, E.TOTAL, F.TOTAL, G.TOTAL > >>ORDER BY B.TIPO, C.MARCA, D.MODELO > >> > >>Gostaria de saber se esse é o jeito certo ou tem algo mais simples para > >>fazer isso? > >> > >>muito obrigado > >> > >>Thiago > >> > >> > >> > >> > > > > > >-- > >Atenção! As mensagens deste grupo são de acesso público e de inteira > >responsa
Re: [oracle_br] duvida com SELECT
Entao deu certo sim. Agora queria saber se essa forma é melhor do que a com subqueries ? muito obrigado Thiago msn: [EMAIL PROTECTED] Marcia Bussolaro escreveu: >Oi Thiago, > > Tente assim: > >SELECT B.TIPO, C.MARCA, D.MODELO, >COUNT(A.NUM_SERIE) AS TOTAL_GERAL, >sum(decode(a.status, 'ES',1,0)) AS TOTAL_ESTOQUE, >sum(decode(a.status, 'IN',1,0)) AS TOTAL_INSTALADO, >sum(decode(a.status, 'DF',1,0)) AS TOTAL_DEFEITO > FROM TBL_EQUIPAMENTOS A, > TBL_EQUIP_TIPOS B, > TBL_EQUIP_MARCAS C, > TBL_EQUIP_MODELOS D > WHERE A.ID_TIPO = B.ID > AND A.ID_MARCA = C.ID > AND A.ID_MODELO = D.ID > GROUP BY B.TIPO, C.MARCA, D.MODELO, a.status > ORDER BY B.TIPO, C.MARCA, D.MODELO, a.status > > Como eu não testei ... pode precisar de algum ajuste ... > >[] >Marcia > > >On Fri, 18 Aug 2006 09:16:34 -0300, Thiago Menon <[EMAIL PROTECTED]> escreveu: > > > >>De: Thiago Menon <[EMAIL PROTECTED]> >>Data: Fri, 18 Aug 2006 09:16:34 -0300 >>Para: Oracle Grupo >>Assunto: [oracle_br] duvida com SELECT >> >> >>Olá, >> >>Gostaria de saber se alguem pode me ajudar com um seguinte select >> >>tenho uma tabela TBL_EQUIPAMENTOS com os campos chave ID_TIPO, >>ID_MARCA, ID_MODELO, NUM_SERIE e STATUS campo normal. >> >>preciso montar um SELECT to totalize por STATUS do EQUIPAMENTO. >> >>Hj eu faço o seguinte : >> >>SELECT B.TIPO, C.MARCA, D.MODELO, >> COUNT(A.NUM_SERIE) AS TOTAL_GERAL, >> NVL(E.TOTAL,0) AS TOTAL_ESTOQUE, >> NVL(F.TOTAL,0) AS TOTAL_INSTALADO, >> NVL(G.TOTAL,0) AS TOTAL_DEFEITO >>FROM TBL_EQUIPAMENTOS A, >> TBL_EQUIP_TIPOS B, >> TBL_EQUIP_MARCAS C, >> TBL_EQUIP_MODELOS D, >> (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL >> FROM TBL_EQUIPAMENTOS >> WHERE STATUS = 'ES' >> GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) E, >> (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL >> FROM TBL_EQUIPAMENTOS >> WHERE STATUS = 'IN' >> GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) F, >> (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL >> FROM TBL_EQUIPAMENTOS >> WHERE STATUS = 'DF' >> GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) G >>WHERE A.ID_TIPO = B.ID >>AND A.ID_MARCA = C.ID >>AND A.ID_MODELO = D.ID >>AND A.ID_TIPO = E.ID_TIPO(+) >>AND A.ID_MARCA = E.ID_MARCA(+) >>AND A.ID_MODELO = E.ID_MODELO(+) >>AND A.ID_TIPO = F.ID_TIPO(+) >>AND A.ID_MARCA = F.ID_MARCA(+) >>AND A.ID_MODELO = F.ID_MODELO(+) >>AND A.ID_TIPO = G.ID_TIPO(+) >>AND A.ID_MARCA = G.ID_MARCA(+) >>AND A.ID_MODELO = G.ID_MODELO(+) >>GROUP BY B.TIPO, C.MARCA, D.MODELO, E.TOTAL, F.TOTAL, G.TOTAL >>ORDER BY B.TIPO, C.MARCA, D.MODELO >> >>Gostaria de saber se esse é o jeito certo ou tem algo mais simples para >>fazer isso? >> >>muito obrigado >> >>Thiago >> >> >> >> > > >-- >Atenção! As mensagens deste grupo são de acesso público e de inteira >responsabilidade de seus remetentes. >Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ >--__ > >OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: >http://www.oraclebr.com.br/ >__ >Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine >Links do Yahoo! Grupos > > > > > > > > > > -- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --__ OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: http://www.oraclebr.com.br/ __ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] duvida com SELECT
Oi Thiago, Tente assim: SELECT B.TIPO, C.MARCA, D.MODELO, COUNT(A.NUM_SERIE) AS TOTAL_GERAL, sum(decode(a.status, 'ES',1,0)) AS TOTAL_ESTOQUE, sum(decode(a.status, 'IN',1,0)) AS TOTAL_INSTALADO, sum(decode(a.status, 'DF',1,0)) AS TOTAL_DEFEITO FROM TBL_EQUIPAMENTOS A, TBL_EQUIP_TIPOS B, TBL_EQUIP_MARCAS C, TBL_EQUIP_MODELOS D WHERE A.ID_TIPO = B.ID AND A.ID_MARCA = C.ID AND A.ID_MODELO = D.ID GROUP BY B.TIPO, C.MARCA, D.MODELO, a.status ORDER BY B.TIPO, C.MARCA, D.MODELO, a.status Como eu não testei ... pode precisar de algum ajuste ... [] Marcia On Fri, 18 Aug 2006 09:16:34 -0300, Thiago Menon <[EMAIL PROTECTED]> escreveu: > De: Thiago Menon <[EMAIL PROTECTED]> > Data: Fri, 18 Aug 2006 09:16:34 -0300 > Para: Oracle Grupo > Assunto: [oracle_br] duvida com SELECT > > > Olá, > > Gostaria de saber se alguem pode me ajudar com um seguinte select > > tenho uma tabela TBL_EQUIPAMENTOS com os campos chave ID_TIPO, > ID_MARCA, ID_MODELO, NUM_SERIE e STATUS campo normal. > > preciso montar um SELECT to totalize por STATUS do EQUIPAMENTO. > > Hj eu faço o seguinte : > > SELECT B.TIPO, C.MARCA, D.MODELO, >COUNT(A.NUM_SERIE) AS TOTAL_GERAL, >NVL(E.TOTAL,0) AS TOTAL_ESTOQUE, >NVL(F.TOTAL,0) AS TOTAL_INSTALADO, >NVL(G.TOTAL,0) AS TOTAL_DEFEITO > FROM TBL_EQUIPAMENTOS A, > TBL_EQUIP_TIPOS B, > TBL_EQUIP_MARCAS C, > TBL_EQUIP_MODELOS D, > (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL > FROM TBL_EQUIPAMENTOS > WHERE STATUS = 'ES' > GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) E, > (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL > FROM TBL_EQUIPAMENTOS > WHERE STATUS = 'IN' > GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) F, > (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL > FROM TBL_EQUIPAMENTOS > WHERE STATUS = 'DF' > GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) G > WHERE A.ID_TIPO = B.ID > AND A.ID_MARCA = C.ID > AND A.ID_MODELO = D.ID > AND A.ID_TIPO = E.ID_TIPO(+) > AND A.ID_MARCA = E.ID_MARCA(+) > AND A.ID_MODELO = E.ID_MODELO(+) > AND A.ID_TIPO = F.ID_TIPO(+) > AND A.ID_MARCA = F.ID_MARCA(+) > AND A.ID_MODELO = F.ID_MODELO(+) > AND A.ID_TIPO = G.ID_TIPO(+) > AND A.ID_MARCA = G.ID_MARCA(+) > AND A.ID_MODELO = G.ID_MODELO(+) > GROUP BY B.TIPO, C.MARCA, D.MODELO, E.TOTAL, F.TOTAL, G.TOTAL > ORDER BY B.TIPO, C.MARCA, D.MODELO > > Gostaria de saber se esse é o jeito certo ou tem algo mais simples para > fazer isso? > > muito obrigado > > Thiago > > -- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --__ OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: http://www.oraclebr.com.br/ __ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
[oracle_br] duvida com SELECT
Olá, Gostaria de saber se alguem pode me ajudar com um seguinte select tenho uma tabela TBL_EQUIPAMENTOS com os campos chave ID_TIPO, ID_MARCA, ID_MODELO, NUM_SERIE e STATUS campo normal. preciso montar um SELECT to totalize por STATUS do EQUIPAMENTO. Hj eu faço o seguinte : SELECT B.TIPO, C.MARCA, D.MODELO, COUNT(A.NUM_SERIE) AS TOTAL_GERAL, NVL(E.TOTAL,0) AS TOTAL_ESTOQUE, NVL(F.TOTAL,0) AS TOTAL_INSTALADO, NVL(G.TOTAL,0) AS TOTAL_DEFEITO FROM TBL_EQUIPAMENTOS A, TBL_EQUIP_TIPOS B, TBL_EQUIP_MARCAS C, TBL_EQUIP_MODELOS D, (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL FROM TBL_EQUIPAMENTOS WHERE STATUS = 'ES' GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) E, (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL FROM TBL_EQUIPAMENTOS WHERE STATUS = 'IN' GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) F, (SELECT ID_TIPO, ID_MARCA, ID_MODELO, COUNT(NUM_SERIE) AS TOTAL FROM TBL_EQUIPAMENTOS WHERE STATUS = 'DF' GROUP BY ID_TIPO, ID_MARCA, ID_MODELO) G WHERE A.ID_TIPO = B.ID AND A.ID_MARCA = C.ID AND A.ID_MODELO = D.ID AND A.ID_TIPO = E.ID_TIPO(+) AND A.ID_MARCA = E.ID_MARCA(+) AND A.ID_MODELO = E.ID_MODELO(+) AND A.ID_TIPO = F.ID_TIPO(+) AND A.ID_MARCA = F.ID_MARCA(+) AND A.ID_MODELO = F.ID_MODELO(+) AND A.ID_TIPO = G.ID_TIPO(+) AND A.ID_MARCA = G.ID_MARCA(+) AND A.ID_MODELO = G.ID_MODELO(+) GROUP BY B.TIPO, C.MARCA, D.MODELO, E.TOTAL, F.TOTAL, G.TOTAL ORDER BY B.TIPO, C.MARCA, D.MODELO Gostaria de saber se esse é o jeito certo ou tem algo mais simples para fazer isso? muito obrigado Thiago -- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --__ OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: http://www.oraclebr.com.br/ __ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html