人
这是我的小问题。 我有三张桌子: a_names_1 b_names_2 c_names_3 他们是相同的结构。所有这些都有两个项目:名称和使用
是否有任何QUERY要运行以获取并计算所有这三个表中“使用”= 1的所有'名称'。
我试过这个,但没有用:
(SELECT COUNT(*) 'name' from a_names_1) UNION
(SELECT COUNT(*) 'name' from a_names_2) UNION
(SELECT COUNT(*) 'name' from a_names_3) WHERE `used`=1
我正在使用PHPMyAdmin for MySQL。
任何帮助将不胜感激..提前感谢
答案 0 :(得分:1)
此查询从names
used=1
的计数
select count(distinct name)
from
(
select name,used from a_names_1 where used=1
union all
select name,used from a_names_2 where used=1
union all
select name,used from a_names_3 where used=1
) t
如果您需要为所有表中的每个NAME SUM所有USED,并仅使用SUM of used = 1输出:
select count(*) from
(
select name, SUM(used)
from
(
select name,used from a_names_1
union all
select name,used from a_names_2
union all
select name,used from a_names_3
) t
GROUP BY name
HAVING SUM(used)=1
) t1
答案 1 :(得分:0)
select count(*) as name
from
(
select name, used from a_names_1
union
select name, used from a_names_2
union
select name, used from a_names_3) t
where t.used = 1
答案 2 :(得分:0)
可能这很慢,因为你失去了索引优化。我要做的是做三个查询,比如
SELECT SUM('name') AS name_sum
FROM ((SELECT COUNT(*) 'name' from a_names_1 WHERE `used`=1)
UNION (SELECT COUNT(*) 'name' from a_names_2 WHERE `used`=1));
如果这不起作用,则可能是使用名称
时出现问题答案 3 :(得分:0)
也许你想要这样:
select count(*) as cnt
from
(
select name from a_names_1 t1 where t1.used = 1
union
select name from a_names_2 t2 where t2.used = 1
union
select name from a_names_3 t3 where t3.used = 1
) t
答案 4 :(得分:0)
直接的解决方案;
SELECT SUM(used) FROM (
SELECT used FROM a_names_1 WHERE used=1
UNION ALL
SELECT used FROM a_names_2 WHERE used=1
UNION ALL
SELECT used FROM a_names_3 WHERE used=1
) a
如果你在used
上有一个索引(并且唯一使用的值是0或1),那么另一种选择就是使用索引进行计数;
SELECT SUM(used) total FROM (
SELECT SUM(used) used FROM a_names_1
UNION ALL
SELECT SUM(used) FROM a_names_2
UNION ALL
SELECT SUM(used) FROM a_names_3
) a
如果查看后一个查询的查询计划,可以看到它有效地使用了索引。