Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rodrigo_DaNaDao

select

Recommended Posts

Gostaria de retornar a quantidade de licencas ativas das tabelas licenca_realtime e licenca_componente de um determinado produto, query:

 

SELECT count(licenca_realtime.cd_licenca)+count(licenca_componente.cd_licenca) AS "Total", count(licenca_componente.cd_licenca) AS "Componente",count(licenca_realtime.cd_licenca) as "Realtime"

FROM licenca_realtime,licenca_componente

WHERE

(licenca_componente.cd_produto=12 AND licenca_componente.dt_validade >= now())

OR (licenca_realtime.cd_produto=12 AND licenca_realtime.dt_validade >= now())

 

Está retornando resultados incoerentes, a impressão que tenho é que está pegando e contando todos os registros de todas tabelas(deveria retornar em torno de 900 licencas e está com um numero imenso). Alguem pode me dizer o que está errado? Se tiverem dicas de desempenho, tambem são bem vindas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente os resultados incoerentes são devidos a falta de join entre as tabelas do seu select, fazendo um cross join.

 

Para facilitar um pouco o entendimento, faça separado.

select 
   a.total_componente + b.total_realtime as "Total"
   , a.total_componente as "Componente"
   , b.total_realtime as "RealTime" 
from 
   (select count(licenca_componente.cd_licenca) as total_componente 
	   from licenca_componente 
	   where licenca_componente.cd_produto = 12
				 AND licenca_componente.dt_validade >= now()
  ) AS a
  , (select count(licenca_realtime.cd_licenca) as total_realtime 
	   from licenca_realtime 
	   where licenca_realtime.cd_produto = 12
				 AND licenca_realtime.dt_validade >= now()
  ) AS b

Dessa forma, você obtém os totais de cada tabela independentes, e depois obtém eles e o total. Essa forma é um pouco mais lenta, mas mais fácil de entender.

 

 

Gostaria de retornar a quantidade de licencas ativas das tabelas licenca_realtime e licenca_componente de um determinado produto, query:

 

SELECT count(licenca_realtime.cd_licenca)+count(licenca_componente.cd_licenca) AS "Total", count(licenca_componente.cd_licenca) AS "Componente",count(licenca_realtime.cd_licenca) as "Realtime"

FROM licenca_realtime,licenca_componente

WHERE

(licenca_componente.cd_produto=12 AND licenca_componente.dt_validade >= now())

OR (licenca_realtime.cd_produto=12 AND licenca_realtime.dt_validade >= now())

 

Está retornando resultados incoerentes, a impressão que tenho é que está pegando e contando todos os registros de todas tabelas(deveria retornar em torno de 900 licencas e está com um numero imenso). Alguem pode me dizer o que está errado? Se tiverem dicas de desempenho, tambem são bem vindas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.