2009-06-17 24 views
6

Tôi có hai câu SELECT riêng biệt mà cả hai đều GROUP-BY'd riêng ví dụ:MySQL: Có thể THAM GIA kết quả GROUP-BY'd thành hai CHỌN không?

SELECT x, y, z FROM a GROUP BY x 
SELECT x, n, o FROM b GROUP BY x 

Tôi rất muốn để JOIN hai lựa chọn này lại với nhau để kết hợp cột của họ, chẳng hạn như:

SELECT x as x1, y, z FROM a GROUP BY x 
LEFT JOIN (
    SELECT x as x2, n, o FROM b GROUP BY x) 
ON x1=x2; 

Điều này có thể không? Tôi hỏi vì MySQL đang khiếu nại

Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần 'LEFT JOIN CHỌN x như x2

Nếu đây là có thể, bất cứ suy nghĩ về những gì xảy ra với cú pháp của tôi không?

Cảm ơn rất nhiều!

Trả lời

5

này hoạt động

select * from (
    (select 1 a,2 b,3 c) t1 left join (select null a,2 b,5 c) t2 on (t1.b=t2.b) 
); 

Ngoài ra,

select * from (
    (select 1 a,2 b,3 c) t1 left join (select null a,2 b,5 c) t2 using (b) 
); 

Cả hai kết quả trong

+---+---+---+------+---+---+ 
| a | b | c | a | b | c | 
+---+---+---+------+---+---+ 
| 1 | 2 | 3 | NULL | 2 | 5 | 
+---+---+---+------+---+---+ 
1 row in set (0.00 sec) 
+0

Chính xác những gì tôi muốn - cảm ơn ! – DarkSquid

4

Có một số cách mà bạn có thể đạt được điều này:

  1. xuất sắc nhất: Tham gia vào bảng TRƯỚC nhóm như sau:
     
    SELECT a.x, y, z, n, o 
        FROM a INNER JOIN b ON a.x = b.x 
    GROUP BY a.x, b.x; 
    
  2. Chọn từ hai truy vấn như phụ truy vấn như vậy:
     
    SELECT * 
    FROM  (SELECT x, y, z FROM a GROUP BY x) AS a 
    INNER JOIN (SELECT x, n, o FROM b GROUP BY x) AS b 
         ON a.x = b.x; 
    
+0

Tôi nghĩ rằng (2) là những gì anh ấy đang tìm kiếm. –

+0

+1 thực sự, # 2 là chính xác những gì tôi muốn - chấp nhận câu trả lời trước đó như nó đã được đầu tiên ... nhưng cảm ơn rất nhiều! – DarkSquid

1

Bạn cũng có thể sử dụng truy vấn này :
SELECT a.x, a.y, a.z, b.x, b.o, b.n FROM a, (SELECT x, n, o FROM b GROUP BY x) as b WHERE a.x = b.x GROUP BY a.x;

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