2013-03-19 56 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會產生一個笛卡兒的產品,這會混亂你的錢。

相關問題