Retornar count(*) de 3 tabelas

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retornar count(*) de 3 tabelas

Mensagem por JoséQuintas »

Tem jeito mais prático de retornar a quantidade de registros de três tabelas?
MySQL

Código: Selecionar todos

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

Retornar count(*) de 3 tabelas

Mensagem por wmanesco »

Olha não sei se funciona, pode tentar assim:

Código: Selecionar todos

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
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retornar count(*) de 3 tabelas

Mensagem 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) Exibido 3543 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retornar count(*) de 3 tabelas

Mensagem por JoséQuintas »

E esse "aproximado" é o mesmo que o Heidisql mostra, mas não é a quantidade real.
cons3.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

Retornar count(*) de 3 tabelas

Mensagem por wmanesco »

será que isso é devido aos registros que já foram deletados?
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retornar count(*) de 3 tabelas

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retornar count(*) de 3 tabelas

Mensagem por JoséQuintas »

Achei este, achei até esquisito, mas funciona.

Código: Selecionar todos

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

Retornar count(*) de 3 tabelas

Mensagem por wmanesco »

Estranho mesmo...

Bacana este método, notou alguma diferença de velocidade para o método que estava usando anteriormente?
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Retornar count(*) de 3 tabelas

Mensagem 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

Código: Selecionar todos

SELECT 1 + 2 + 3 AS QTD
...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retornar count(*) de 3 tabelas

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
wmanesco
Usuário Nível 3
Usuário Nível 3
Mensagens: 116
Registrado em: 09 Set 2016 13:18
Localização: ITAJAI - SC

Retornar count(*) de 3 tabelas

Mensagem 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..
William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Responder