MySQL的;从3表同时获取信息

时间:2013-01-25 10:05:14

标签: mysql sql phpmyadmin

这是我的小问题。 我有三张桌子: 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。

任何帮助将不胜感激..提前感谢

5 个答案:

答案 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

SQLfiddle for testing

如果你在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

SQLfiddle for this example

如果查看后一个查询的查询计划,可以看到它有效地使用了索引。