2013-03-19 10 views
6

SUM(column_a)を2つの異なるテーブルから取得して、その違いを得たいと考えています。私はMySQLを使用しています。 ON句のない2つのテーブルを結合する方法

Table B's sum = 4001

Table A's sum = 1234

は、私は私の 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'句は、テーブルのプロパティを使用する必要はありません。あなたは' tableA内部join tableB on 1 = 1'を持つことができ、クロス結合と同じことを得るでしょう –

答えて

11

Aは、クロス結合された状態なしで参加します。 MySQLでは、/ join/inner joincross joinが同一であることを

FROM table_a a 
CROSS JOIN table_b b 

注:クロス反復右側テーブルの各行の左側の表の各行に参加します。だから、あなたが書くことができます:

FROM table_a a 
JOIN table_b b 

を限り、あなたはon句を省略すると、これはクロス結合として動作します。

2つの表から2つの列を合計する場合は、行が繰り返されるため、クロス結合は機能しません。あなたは非常に膨らんだ数字を得るでしょう。合計については、より良いアプローチは@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

0

あなたが最初のを要約して、計算をしたい:

テーブル間の cross joinを行う
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 

あなたの合計を台無しにするデカルト製品を生成します。

関連する問題