2013-03-19 39 views
6

Tôi muốn lấy số SUM(column_a) từ hai bảng khác nhau và nhận được sự khác biệt của chúng. Tôi đang sử dụng MySQL.Cách tham gia 2 bảng không có điều khoản ON

Table A's sum = 1234

Table B's sum = 4001

Tôi không chắc chắn những gì để đưa vào điều khoản ON tôi:

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

như là một lưu ý phụ mệnh đề 'on' không phải sử dụng thuộc tính của các bảng mà bạn có thể có' select * từ tableA inner join tableB trên 1 = 1' và sẽ nhận được điều tương tự như tham gia chéo –

Trả lời

11

Một tham gia nếu không điều kiện là một chéo tham gia. Một chéo tham gia lặp đi lặp lại mỗi hàng cho bảng tay trái cho mỗi hàng trong bảng tay phải:

FROM table_a a 
CROSS JOIN table_b b 

Lưu ý rằng trong MySQL, cross join/join/inner join giống hệt nhau. Vì vậy, bạn có thể viết:

FROM table_a a 
JOIN table_b b 

Miễn là bạn bỏ qua mệnh đề on, điều này sẽ hoạt động như một tham gia chéo.

Nếu bạn muốn tổng hợp hai cột từ hai bảng, một phép nối chéo sẽ không hoạt động vì nó lặp lại các hàng. Bạn sẽ nhận được số lượng tăng cao. Đối với khoản tiền, một cách tiếp cận tốt hơn sử dụng truy vấn phụ, mỗi câu trả lời @sgeddes.

4

Dưới đây là một lựa chọn sử dụng truy vấn con - có một số cách để làm điều này:

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 Khi đọc lại, đây thực sự là những gì OP dự định làm. – Andomar

0

Bạn muốn tóm tắt đầu tiên và sau đó thực hiện các phép tính:

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 

Làm cross join giữa các bảng sẽ tạo ra một sản phẩm Descartes sẽ làm hỏng số tiền của bạn.

Các vấn đề liên quan