Clipper On Line • Ver Tópico - Retornar count(*) de 3 tabelas
Página 1 de 1

Retornar count(*) de 3 tabelas

MensagemEnviado: 16 Dez 2016 09:36
por JoséQuintas
Tem jeito mais prático de retornar a quantidade de registros de três tabelas?
MySQL

SELECT SUM(QTDAGE) AS TOTALAGE, SUM(QTDINS) AS TOTALINS, SUM(QTDLOC) AS TOTALLOC FROM
(
select COUNT(*) AS QTDAGE, 0 AS QTDINS, 0 AS QTDLOC FROM JPANPAGE
UNION ALL
select 0 AS QTDAGE, count(*) AS QTDINS, 0 AS QTDLOC from JPANPINS
UNION ALL
select 0 AS QTDAGE, 0 AS QTDINS, count(*) AS QTDLOC FROM JPANPLOC
) AS SOMA

Retornar count(*) de 3 tabelas

MensagemEnviado: 16 Dez 2016 09:51
por wmanesco
Olha não sei se funciona, pode tentar assim:

SELECT table_name, TABLE_ROWS
FROM information_schema.TABLES
where table_name in ('tb1', 'tb2', 'tb3') AND table_schema="nome_do_schema"
group by table_name;


avise se funcionar

Retornar count(*) de 3 tabelas

MensagemEnviado: 16 Dez 2016 12:17
por JoséQuintas
Não, o MySQL é meio esquisito nesse ponto, ai são os valores aproximados ou sei lá o que.

cons1.png


cons2.png
cons2.png (15.02 KiB) Visualizado 2568 vezes

Retornar count(*) de 3 tabelas

MensagemEnviado: 16 Dez 2016 12:21
por JoséQuintas
E esse "aproximado" é o mesmo que o Heidisql mostra, mas não é a quantidade real.

cons3.png

Retornar count(*) de 3 tabelas

MensagemEnviado: 16 Dez 2016 20:13
por wmanesco
será que isso é devido aos registros que já foram deletados?

Retornar count(*) de 3 tabelas

MensagemEnviado: 21 Dez 2016 13:04
por JoséQuintas
Um recente, aonde não tem nada deletado.
Apenas estou transferindo o que seria status "excluído" do outro arquivo pra cá, então é sempre apenas inclusão.
A consulta é pelo HEIDISQL

Olhando os totais da base de dados: 3.098

qtd1.png


Visualizando a tabela: 1.956

qtd2.png


Pedindo a quantidade de registros: 2.567

qtd3.png


Ou seja, três totais diferentes: 3.098, 1.956 e 2.567
Não dá pra usar aquele total que tem no MySQL.
Tem que pedir pra somar mesmo.

Retornar count(*) de 3 tabelas

MensagemEnviado: 21 Dez 2016 13:16
por JoséQuintas
Achei este, achei até esquisito, mas funciona.

select
(
( select count(*) From log_cpc ) +
( select count(*) from log_localidade ) +
( select count(*) from log_logradouro ) +
( select count(*) from log_unid_oper ) +
( select count(*) from log_grande_usuario )
)
as QTD

Retornar count(*) de 3 tabelas

MensagemEnviado: 21 Dez 2016 17:47
por wmanesco
Estranho mesmo...

Bacana este método, notou alguma diferença de velocidade para o método que estava usando anteriormente?

Retornar count(*) de 3 tabelas

MensagemEnviado: 21 Dez 2016 18:54
por alxsts
Olá!

wmanesco escreveu:Estranho mesmo...

Não me causou estranheza mas é uma forma curiosa. Na verdade, a função agregada Count() retorna um numérico. A consulta apresentada apenas soma os resultados numéricos retornados. Como se fosse
SELECT 1 + 2 + 3 AS QTD
...

Retornar count(*) de 3 tabelas

MensagemEnviado: 21 Dez 2016 20:05
por JoséQuintas
A velocidade é praticamente a mesma, porque tem que contar nos três.
Mas o primeiro mostra totais de cada um, enquanto este mostra total geral.
Vai depender da necessidade.

Retornar count(*) de 3 tabelas

MensagemEnviado: 22 Dez 2016 10:51
por wmanesco
alxsts escreveu: Não me causou estranheza mas é uma forma curiosa. Na verdade, a função agregada Count() retorna um numérico. A consulta apresentada apenas soma os resultados numéricos retornados.

Não entendi..