2013-03-19 52 views
6

我想从两个不同的表中获取SUM(column_a),并获得它们的区别。我正在使用MySQL。如何在没有ON子句的情况下连接2个表

Table A's sum = 1234

Table B's sum = 4001

我不知道要放什么东西在我的ON条款:

SELECT 
    SUM(a.column1) AS table_a_sum, 
    SUM(b.column1) AS table_b_sum, 
    SUM(a.column1) - SUM(b.column1) AS difference 
FROM table_a a 
JOIN table_b b 
ON ?????? 
+0

作为一个附注,'on'子句不必使用表的属性,你可以'select * from tableA内连接tableB on 1 = 1'并且会得到与交叉连接相同的结果 – 2013-03-19 19:00:30

回答

11

一个连接没有条件交叉联接。交叉连接重复各行针对右手表的每一行的左手表:

FROM table_a a 
CROSS JOIN table_b b 

注意,在MySQL中,cross join/join/inner join是相同的。所以,你可以写:

FROM table_a a 
JOIN table_b b 

只要你省略on条款,这将作为一个交叉连接。

如果您想从两个表格中总结两列,交叉连接将无法工作,因为它会重复行。你会得到高度膨胀的数字。对于总和,更好的方法使用子查询,per @ sgeddes答案。

4

下面是一个使用子查询一个选项 - 有几种方法可以做到这一点:

SELECT 
    table_a_sum, 
    table_b_sum, 
    table_a_sum - table_b_sum AS difference 
FROM 
    (SELECT SUM(column1) table_a_sum FROM table_a) a, 
    (SELECT SUM(column1) table_b_sum FROM table_b) b 
+1

+ 1在重读时,这实际上是OP打算做的事情。 – Andomar 2013-03-19 18:59:04

0

要汇总,然后再做算了一笔账:

select a.suma, b.sumb, a.suma - b.sumb 
from (select sum(a.column1) as suma from tablea) a cross join 
    (select sum(b.column1) as sumb from tableb) b 

做表之间的cross join会产生一个笛卡儿的产品,这会混乱你的钱。

相关问题