2012-04-19 51 views
5

Tôi có 2 bảng: người dùng & số dư.MySQL - Tham gia 2 bảng

Tôi muốn nối các bảng với tất cả các chi tiết từ bảng người dùng (tất cả các trường của tất cả các bộ) với mục nhập mới nhất từ ​​bảng cân đối (1 trường được liên kết bởi một id người dùng).

Dưới đây là cấu trúc của các bảng:

cân bằng:

+---------+ 
| Field | 
+---------+ 
| dbid | 
| userId | 
| date | 
| balance | 
+---------+ 

người dùng:

+-------------+ 
| Field  | 
+-------------+ 
| dbid  | 
| id   | 
| fName  | 
| sName  | 
| schedName | 
| flexiLeave | 
| clockStatus | 
+-------------+ 

Tôi đã cố gắng trong nhiều giờ để làm điều này và gần nhất tôi có thể nhận được là để trả lại hàng cho một người dùng:

SELECT u.*, b.balance, b.date FROM users u, balance b WHERE u.id = b.userId AND b.date = (SELECT MAX(date) FROM balance WHERE userId = 'A8126982'); 

Hoặc tôi có thể chọn tất cả người dùng nhưng không phải là entry mới nhất trong bảng cân đối:

SELECT u.*, b.balance, b.date FROM users u, balance b WHERE u.id = b.userId GROUP BY u.id; 

Tôi đã thử nhiều truy vấn khác nhau và dường như nhận được gần gũi hơn nhưng tôi chỉ không thể có được đến nơi mà tôi muốn được.

Mọi trợ giúp sẽ được đánh giá cao.

+0

đầu ra bạn nhận được trong truy vấn đầu tiên của ur là gì? –

Trả lời

18

Bạn có thể sử dụng SQL đầu tiên bạn đã viết nhưng đối với tất cả người dùng:

SELECT u.*, b.balance, b.date 
FROM users u JOIN balance b ON u.id = b.userId 
WHERE b.date = (SELECT MAX(date) FROM balance WHERE userId = u.id); 

Điều này có thể không phải là cách nhanh nhất để có được kết quả, nhưng nó sẽ cung cấp cho bạn những gì bạn cần. Tôi sử dụng các truy vấn tương tự ở một vài nơi trong ứng dụng của mình.

+0

Cảm ơn bạn, đây là kết quả tôi cần. – SteveJDB