当我运行以下查询时:
select SUM(t1.total_amount) as one, SUM(t2.total_amount) as two
from table1 t1, table2 t2;
我得到了这些结果:
ONE TWO
2000 3000
但是当我运行这个查询时:
select SUM(t1.total_amount) as one table1 t1;
我得到了这个结果:
ONE
50
看起来第一个查询的结果不正确。有人能指出我正确的方向吗?
答案 0 :(得分:4)
这样做时:
select * from table1 t1, table2 t2
你实际上是交叉连接两个表,产生一个笛卡尔积(t1中的每一行都与t2中的每一行组合)。
您可能错过了JOIN条件:
select sum(t1.total_amount), sum(t2.total_amount)
from t1 join t2 on t1.[???] = t2.[???]
编辑:
根据您的评论,您似乎想要这两个单独查询的联合 从t1中选择't1',sum(total_amount) 联盟 从t2
中选择't2',sum(total_amount)这将显示两行而不是列的总和,但这是AFAIK最简单的方法。
答案 1 :(得分:0)
由于您表明该表不相关,只是具有相似的数据, UNION可能是更好的解决方案。 但是,按照前面问题的方法,您可以选择部分结果,然后将它们与愿意捐赠的“从双重选择”(非)背景中合并。
示例:
select COUNT(*), SUM(X) from SOME_TABLE;
COUNT(*) SUM(X)
---------- ----------
57 6450
select COUNT(*), SUM(X) from OTHER_TABLE;
COUNT(*) SUM(X)
---------- ----------
315 15165
select ( select SUM(X) from SOME_TABLE) as ONE,
( select SUM(X) from OTHER_TABLE) as TWO from dual;
ONE TWO
---------- ----------
6450 15165