Bom dia,
Estou com uma dúvida no SQL agradeço se alguém puder ajudar.
Estou estudando algumas querys sql e vi que em alguns locais tem
SELECT 1 FROM .... (Dentro de uma sub-query)
O que seria isso?
Obrigado desde já.
Select 1 from...
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Cara geralmente select 1 from.. é pra testar se existe alguma coisa na tabela conforme os parâmetros da query.
Mas só da pra confirmar o porque ele foi usado se tu postar uma query exemplo.
Mas só da pra confirmar o porque ele foi usado se tu postar uma query exemplo.
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
é simples como o sergio falou..
considere como uma verificaçao de existencia.. se existe então...
considere como uma verificaçao de existencia.. se existe então...
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Quase sempre o SELECT 1 vem logo após um EXISTS.
Pois o Exists retorna VERDADEIRO caso tenha alguma coisa. E falso se não vier nada.
Pois o Exists retorna VERDADEIRO caso tenha alguma coisa. E falso se não vier nada.
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Em geral é isso mesmo.
O exemplo mais complexo de entender em um select 1 from é em um report que eu trabalhei onde conforme os parâmetros informados ele adicionava na query do report algo tipo
até hoje eu não entendo como a query retornava valores quando o resultado do select 1 era nulo, só sei que funcionava direitinho e que foi desenvolvido desta maneira para melhorar a performance.
O exemplo mais complexo de entender em um select 1 from é em um report que eu trabalhei onde conforme os parâmetros informados ele adicionava na query do report algo tipo
AND 1 = (select 1 from tabela where ....)
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Quanto a melhorar a performance eu diria que é mito. Mas funcionou está certo.
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
pode se dizer ate que é desprezivel porem tem um tempo na query destino para montagem da saída, logo poderia interferir sim.. mas como disse talvez a interferencia seja desprezivel
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Bom , se realmente melhora a performance da query eu não posso afirmar que sim, pois nunca cheguei a alterar a query para fazer a restrição dos parâmetros de maneira "normal".
Mas é certo que algum motivo para estruturar todo o relatório de maneira diferente dos demais existe, só que como ele foi desenvolvido por pessoas que não mais trabalham na empresa.
Se você souberem alguma diferença
O que é feito é algo assim, eu tenho uma consulta baseado em varias tabelas, os joins entre elas são feito pelas pk's, até aí normal.
Porém ao invés de restringir os campos tipo :
ou....
como é feito na grande maioria dos relatórios, as restrições são feitas na trigger after parameter form e adicionadas na query como um ¶metro.
E são algo tipo :
Eu imaginava que ele foi desenvolvido para poder fazer restrições que afetem apenas o resultado do parâmetro e não toda a query do report em si, mas depois me disseram que não.
Se alguém souber por favor posta aí.
Mas é certo que algum motivo para estruturar todo o relatório de maneira diferente dos demais existe, só que como ele foi desenvolvido por pessoas que não mais trabalham na empresa.
Se você souberem alguma diferença
O que é feito é algo assim, eu tenho uma consulta baseado em varias tabelas, os joins entre elas são feito pelas pk's, até aí normal.
Porém ao invés de restringir os campos tipo :
tabela.campo = nvl(:parametro, tabela.campo)
(:parametro is null or (tabela.campo = :parametro))
E são algo tipo :
(AND 1 = (select 1 from tabela where (algumas restrições que poderiam estar na query) and campo = nvl(:parametro, campo)))
Se alguém souber por favor posta aí.
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Sem ver um explain plan e um tkprof é difícil de dizer o motivo. Assumindo que as duas queries retornem o mesmo output, mas essa versão é mais rápida, é provável que essa mudança tenha "passado a perna" no CBO, fazendo ele avaliar num plano de acesso com custo menor e coincidentemente com um desempenho superior, com menos consistent gets ou técnicas de join mais adequadas ao que está sendo recuperado.
Não quero dizer que não ficou mais rápido nesse caso, até porque contra fatos não há argumentos, mas sim que esse tipo de solução não é um "macete" secreto do Oracle e que vai implicar numa melhoria de desempenho em outros casos.
Não quero dizer que não ficou mais rápido nesse caso, até porque contra fatos não há argumentos, mas sim que esse tipo de solução não é um "macete" secreto do Oracle e que vai implicar numa melhoria de desempenho em outros casos.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes