Mat*_* S. 24 mysql count select
我正在编写一个脚本来获取几个表的行数,但是对于某些表,我只想获取设置了标志的行数(在这种情况下为 active=1)。有没有一种方法可以在一个查询中做到这一点?
例如:
表users有一个名为 active 的列
表clients没有名为 active 的列
我想获取 active=1 的用户数,并获取客户端数。
在你说“只是硬编码它”之前,这是一个在 python 脚本中的查询,该脚本可以在许多不同的数据库上运行,我无法知道我的脚本将选择哪些表,以及它们是否有一个名为 的列active,以及我宁愿只用一个查询来完成所有工作,而不是两个单独的查询并依靠 mysql 抛出错误,所以我知道使用另一个查询。
ype*_*eᵀᴹ 53
我的第一个想法是使用第INFORMATION_SCHEMA一个,这样您就可以知道(在对 MySQL 实例中所有表的一个查询中)哪些表有一个active列,然后使用该信息来构建您的查询。这可能是最明智的方法。
还有另一种棘手的方法,不管表是否有这样的列都可以工作:
SELECT
( SELECT COUNT(*)
FROM TableName AS t
WHERE active = 1
) AS cnt
FROM
( SELECT 1 AS active
) AS dummy ;
Run Code Online (Sandbox Code Playgroud)
在SQL-Fiddle测试它是如何工作的?
如果表中有一个名为 的列active,则查询被“翻译”为:
WHERE t.active = 1
Run Code Online (Sandbox Code Playgroud)
如果表中没有名为 的列active,则查询将被“翻译”为:
WHERE dummy.active = 1 -- which is true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20602 次 |
| 最近记录: |