2

以下のようなMySQLテーブルがいくつかあります

表1
Att1 | 国旗
xxx | 1


表2
Att1 | 国旗
xxx | 2
yyy | yyy | 2


表3
Att1 | 国旗
xxx | 3
yyy | yyy | 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

クエリの問題は、5 つのテーブルすべてに対してクロス結合 (デカルト結合) を行っていることです。したがって、あなたは実際に要約しています:

Att1 | フラグ | Att1 | フラグ | Att1 | フラグ | Att1 | フラグ | Att1 | 国旗
xxx | 1 | xxx | 2 | xxx | 3 | xxx | 4 | xxx | 6
xxx | 1 | yyy | yyy | 2 | xxx | 3 | xxx | 4 | xxx | 6
xxx | 1 | xxx | 2 | yyy | yyy | 3 | xxx | 4 | xxx | 6
xxx | 1 | yyy | yyy | 2 | yyy | yyy | 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 に答える