2

我有几个 MySQL 表,如下所示

表格1
Att1 | 旗帜
xxx | 1


表2
Att1 | 旗帜
xxx | 2
年年 | 2


表3
Att1 | 旗帜
xxx | 3
年年 | 3


表4
Att1 | 旗帜
xxx | 4

表5
Att1 | 旗帜
xxx | 6



每个表都有一些属性以及上述属性。我想总结每个表的标志属性并查看它们。MySQL代码如下。

创建视图块为
选择 sum(table1.flag) 作为 table1, sum(table2.flag) 作为 table2,
sum(table3.flag) as table3, sum(table4.flag) as table4,
sum(table5.flag) as table5
从表 1、表 2、表 3、表 4、表 5;

在我看来,我看到的是:

表1|表2|表3|表4|表5
4 |8 |12 |16 |24

在我看来,我真正想看到的是:

表1|表2|表3|表4|表5
1 |4 |6 |4 |6

帮我!提前致谢!

4

3 回答 3

4

试试这个:

select table1, table2, table3, table4, table5
from (select sum(table1.flag)as table1) t1 cross join
     (select sum(table2.flag)as table2) t2 cross join
     (select sum(table3.flag)as table2) t3 cross join
     (select sum(table4.flag)as table2) t4 cross join
     (select sum(table5.flag)as table2) t5

您的查询正在执行cross join表中的笛卡尔积。避免这种情况的最好方法是对每个表进行单独的聚合。您也可以在 select 子句中这样做:

select 
     (select sum(table1.flag)as table1) as t1,
     (select sum(table2.flag)as table2) as t2,
     (select sum(table3.flag)as table2) as t3,
     (select sum(table4.flag)as table2) as t4,
     (select sum(table5.flag)as table2) as t5
于 2013-01-18T04:23:01.170 回答
2

每个表中的每一行都与其他表中的每一行连接,然后对结果求和。这不是你想要的。尝试这个:

create view block as 
select 'table1' as tableName, sum(flag) from 
table1
UNION ALL
select 'table2' as tableName, sum(flag) from 
table2
UNION ALL
select 'table3' as tableName, sum(flag) from 
table3
UNION ALL
select 'table4' as tableName, sum(flag) from 
table4
UNION ALL
select 'table5' as tableName, sum(flag) from 
table5
于 2013-01-18T04:24:29.733 回答
1

您的查询的问题是您正在对所有五个表进行交叉连接(笛卡尔连接)。因此,您实际上是在总结:

Att1 | 旗帜 | Att1 | 旗帜 | Att1 | 旗帜 | Att1 | 旗帜 | Att1 | 旗帜
xxx | 1 | xxx | 2 | xxx | 3 | xxx | 4 | xxx | 6
xxx | 1 | 年年 | 2 | xxx | 3 | xxx | 4 | xxx | 6
xxx | 1 | xxx | 2 | 年年 | 3 | xxx | 4 | xxx | 6
xxx | 1 | 年年 | 2 | 年年 | 3 | xxx | 4 | xxx | 6
-----+------+------+------+------+------+------+-- ----+------+-----
     | 4 | | 8 | | 12 | | 16 | | 24

相反,您要做的是单独汇总表格;最简单的就是使用 5 个子查询:

SELECT (SELECT SUM(Flag) FROM table1) AS table1,
    (SELECT SUM(Flag) FROM table2) AS table2,
    (SELECT SUM(Flag) FROM table3) AS table3,
    (SELECT SUM(Flag) FROM table4) AS table4,
    (SELECT SUM(Flag) FROM table5) AS table5
于 2013-01-18T04:28:18.583 回答