2012-11-24 42 views
5

Tôi có một bảng - nhận xét. Người dùng có thể đăng bài nếu không phải là thành viên của trang web nhưng muốn hiển thị chi tiết của họ nếu họ có.SQL Tham gia và hiển thị kết quả nếu tham gia sai

Vì vậy, nếu người dùng nhận xét ai KHÔNG phải là thành viên tôi hiển thị bài đăng của họ nhưng không liên kết với hồ sơ của họ, vì họ không có.

Vì vậy, trong các truy vấn sau đây tôi muốn trả lại hàng thậm chí nếu không có gia nhập:

select wc.comment, wc.comment_by_name, wc.user_id, u.url from comments wc 
join users u on wc.wag_uid = u.user_id 
where id = '1237' group by wc.comment order by wc.dateadded desc 

Tôi muốn quay trở lại:

comment comment_by_name user_id url 
------- --------------- ------- ---- 
hello  dan    12   /dan 
hey  jane       /jane 
world  jack    10   /jack 

Nhưng ở trên không trả lại dữ liệu cho jane vì cô ấy không có user_id

Có cách nào để trả về tất cả dữ liệu ngay cả khi tham gia bằng không?

Trả lời

8

sử dụng LEFT JOIN thay

SELECT wc.comment, wc.comment_by_name, wc.user_id, u.url 
FROM comments wc 
     LEFT JOIN users u 
      on wc.wag_uid = u.user_id 
WHERE id = '1237' 
GROUP BY wc.comment 
ORDER BY wc.dateadded DESC 

cơ bản INNER JOIN chỉ chọn hồ sơ mà một bản ghi từ một bảng có ít nhất một trận đấu trên bàn khác trong khi LEFT JOIN chọn tất cả các hàng từ phía bảng tay trái (tại của bạn trường hợp, nó là comments) cho dù nó không khớp với bảng khác.

+0

Tôi tự học cách tham gia khi đang bay và đó là một bài học có giá trị ngay tại đó! Cám ơn rất nhiều! Sẽ chấp nhận khi nó cho phép tôi –

+2

xem tại đây cho [Visual Representation of SQL Joins] (http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins) –