如何在没有ON子句的情况下连接2个表
问题描述:
我想从两个不同的表中获取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 ??????
答
一个连接没有条件交叉联接。交叉连接重复各行针对右手表的每一行的左手表:
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答案。
答
下面是一个使用子查询一个选项 - 有几种方法可以做到这一点:
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
答
要汇总,然后再做算了一笔账:
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
会产生一个笛卡儿的产品,这会混乱你的钱。
作为一个附注,'on'子句不必使用表的属性,你可以'select * from tableA内连接tableB on 1 = 1'并且会得到与交叉连接相同的结果 – 2013-03-19 19:00:30