簡體   English   中英

如何在沒有ON子句的情況下連接2個表

[英]How to join 2 tables without an ON clause

我想從兩個不同的表中獲取SUM(column_a) ,並獲得它們的區別。 我正在使用MySQL。

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子句,這將作為交叉連接。

如果您想從兩個表中對兩列進行求和,則交叉連接將無法工作,因為它會重復行。 你會得到高度膨脹的數字。 對於總和,根據@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

您想先進行匯總,然后進行計算:

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將生成笛卡爾積,這將會弄亂您的總和。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM