[oracle_br] DUVIDA COM SELECT

2007-06-01 Por tôpico Vinicius Trintin
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

2006-08-18 Por tôpico Marcia Bussolaro
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

2006-08-18 Por tôpico Thiago Menon
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

2006-08-18 Por tôpico Marcia Bussolaro
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

2006-08-18 Por tôpico Thiago Menon
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