2012-10-17 48 views
5

Tôi đang gặp một số vấn đề để truy vấn sau hoạt động - trong mọi trường hợp, tôi chỉ dường như có một nhóm nhỏ người dùng quay lại thay vì toàn bộ danh sách.
Tôi đã hai bảng sau:LEFT Tham gia các vấn đề truy vấn với

Users: 

- UserId 
- email 

Updates: 

- UserId 
- Status 
- LastUpdated 

Những gì tôi muốn được trả lại là một danh sách tất cả người dùng (từ Users), tình trạng của họ nếu nó đã được cập nhật ngày hôm nay (dựa trên lĩnh vực LastUpdated) nếu không BLANK hoặc NULL nếu nó không được cập nhật ngày hôm nay.

Tôi đã có như xa như thế này:

SELECT users.userid, 
     updates.status 
FROM users 
     LEFT JOIN updates 
       ON users.userid = updates.userid 
WHERE Date(lastupdated) = Date(Now()) 

Trả lời

5

Bạn có thể sử dụng một tuyên bố CASE để chỉ nhận được updates.status nếu ngày là ngày hôm nay:

SELECT users.userId, 
    CASE WHEN DATE(LastUpdated) = DATE(NOW()) THEN updates.status ELSE NULL END AS status 
FROM users 
LEFT JOIN updates ON users.userId=updates.userId 

Hoặc tốt hơn nữa, nếu bạn không cần bất cứ thứ gì từ hàng updates chỉ làm:

SELECT users.userId, updates.status 
FROM users 
LEFT JOIN updates ON users.userId=updates.userId 
    AND DATE(LastUpdated) = DATE(NOW()) 
2
SELECT users.userId, updates.status 
FROM  users 
LEFT JOIN updates 
    ON  updates.userId = users.userId 
    AND DATE(updates.LastUpdated) = DATE(NOW()) 

Đặt tình trạng của bạn trong quá trình tham gia, nếu không nó sẽ buộc mọi người tham gia bị thẩm vấn. Ngoài ra, bạn có thể kiểm tra LastUpdated để được NULL Tôi tin (vì việc tham gia LEFT sẽ chỉ bao gồm thông tin vị trí).

0

Hãy thử điều này

SELECT users.userId, case when DATE(LastUpdated) = DATE(NOW()) 
updates.status else null end as status 
    FROM users 
LEFT JOIN updates ON users.userId=updates.userIdd 
0

Tôi nghĩ rằng những gì bạn đang sau là nối ngoài bên trái để trả lại tất cả người sử dụng và không chỉ một trong đó có thông tin cập nhật ngày hôm nay. Đó phải là một cái gì đó như thế này:

SELECT users.userid, updates.lastupdated 
    FROM users 
    LEFT OUTER JOIN (
    SELECT * FROM updates WHERE DATE(lastupdated) = DATE(NOW()) 
    ) updates ON users.userid = updates.userid 
Các vấn đề liên quan