2011-07-08 26 views
6

Tôi muốn kết hợp ba bàn với nhau như thể hiện ở đây:MySql: sáp nhập ba bảng cùng

merge three tables T1, T2 and T3 together

Về cơ bản tôi muốn bao gồm các mặt hàng từ tất cả ba bảng T1, T2 và T3 và họ đã sáp nhập như được hiển thị trong bảng kết quả. Tôi đã thử một cái gì đó như thế này:

SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid 
FROM T1 
LEFT JOIN T2 ON T1.mid = T2.mid 
LEFT JOIN T3 ON T2.tid = T3.tid 
GROUP BY T1.user; 

Nhưng có vẻ như nó không hoạt động. Nó hiển thị kết quả nhưng chỉ có giá trị duy nhất. Trong kết quả nếu userjohny, nó sẽ chỉ hiển thị giá trị đầu tiên và bỏ qua giá trị thứ hai, mặc dù nó phải nằm trong bảng kết quả.

Có điều gì tôi thiếu không?

+0

Đã thay đổi thẻ thành 'join' vì' merge-table' không rõ ràng. –

+0

@Michael bạn đã đúng. Cảm ơn, nó ổn. Bạn có biết làm thế nào tôi có thể sắp xếp người dùng. Tôi đoán tôi phải sử dụng ORDER BY ở đây. – Johnydep

+0

ORGER BY user ASC/DESC – infinity

Trả lời

3

Nhóm không cần thiết nếu bạn muốn xem tất cả kết quả cho từng người dùng. Nếu không, nó sẽ ẩn một số hàng và chỉ hiển thị một hàng cho mỗi người dùng.

Tham gia lần đầu T1 phải T2 hơn Trái Tham gia T3. Đây là thực hành tốt nếu có phần tử từ T1 không có kết nối với phần tử từ T3 để ngăn hiển thị kết quả NULL cho các trường T £.

SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid 
FROM T1 
RIGHT JOIN T2 ON T1.mid = T2.mid 
LEFT JOIN T3 ON T2.tid = T3.tid; 
+0

cảm ơn bạn đã trả lời và giải thích. – Johnydep

+0

Có RIGHT JOIN tốt hơn. Vì tôi đã có vấn đề này và tôi đã sử dụng WHERE với T2.tid! = 'NULL' ngoài truy vấn trên. Cảm ơn một lần nữa. – Johnydep

4

Loại bỏ GROUP BY. Không cần nó trong truy vấn này.

SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid 
FROM T1 
LEFT JOIN T2 ON T1.mid = T2.mid 
LEFT JOIN T3 ON T2.tid = T3.tid; 
+0

cảm ơn bạn, có đó là chính xác vấn đề, nó làm việc ngay bây giờ. – Johnydep

5

Loại bỏ phần "Nhóm theo". Điều này sẽ khắc phục vấn đề của bạn.

+0

cảm ơn bạn rất nhiều, đây là vấn đề. Làm việc tốt của nó bây giờ – Johnydep

+0

+1 chỉ để tạo nên cho các ổ đĩa bằng cử tri xuống. –