Estou escrevendo um script que obtém uma contagem de linhas para algumas tabelas, no entanto, para algumas tabelas, quero obter apenas uma contagem de linhas em que um sinalizador está definido (neste caso ativo = 1). Existe uma maneira de fazer isso em uma consulta?
Por exemplo:
A tabela users
possui uma coluna chamada active
A tabela clients
não possui uma coluna chamada active
Quero obter uma contagem de usuários em que active = 1 e apenas obter uma contagem de clientes.
Antes de você dizer "apenas codificar", esta é uma consulta que está dentro de um script python que pode ser executado em vários bancos de dados diferentes e não tenho como saber quais tabelas meu script selecionará e se elas têm uma coluna chamada active
e Eu preferiria ter apenas uma consulta para fazer tudo, em vez de duas separadas, e confiar no mysql para gerar um erro, então sei usar a outra.
Respostas:
Meu primeiro pensamento seria usar o
INFORMATION_SCHEMA
primeiro, para que você saiba (em uma consulta para todas as tabelas na instância do MySQL) quais tabelas possuem umaactive
coluna e, em seguida, use essas informações para construir suas consultas. E esta é provavelmente a abordagem mais sensata.Existe uma outra maneira complicada, embora isso funcione, não importa se a tabela possui ou não essa coluna:
Testado no SQL-Fiddle Como funciona?
Se a tabela tiver uma coluna denominada
active
, a consulta será "traduzida" como se tivesse:Se a tabela não tiver uma coluna chamada
active
, a consulta será "traduzida" como se tivesse:fonte
Contagem de clientes por ID do usuário com total geral usando apenas a
users
tabela:Se a tabela de clientes excluiu registros, faça o seguinte:
Para
users
tabelas que não possuem umaactive
coluna:ou
Você precisaria executar essas consultas em cada banco de dados e
UNION ALL
nos resultados.Se você deseja aproveitar o banco de dados INFORMATION_SCHEMA, aqui está um palpite:
De uma chance !!!
fonte
Gostaria de complementar a resposta do @ ypercubeᵀᴹ, mas não consigo escrever comentários por causa das restrições.
Se você não souber qual nome da coluna é usado e precisar obter seu valor máximo, poderá fazer isso:
fonte