2013-02-12 20 views
5

Tôi đang sử dụng Mysql và tôi đang gặp khó khăn khi cố gắng lấy kết quả từ truy vấn SELECT. Tôi có 3 bảng. Các phần bảng đầu tiên, thành phần bảng thứ hai và trạng thái thành phần của bảng thứ ba (dữ liệu trong bảng này là tĩnh).Nhiều Bảng Tham gia với mệnh đề WHERE

select * from Sections;

| section_id | title | description | section_ownerid | 
------------------------------------------------------- 
| 1   | title1 | desc1  | 100    | 
| 2   | title2 | desc2  | 100    | 
| 3   | title3 | desc3  | 100    | 
| 4   | title4 | desc4  | 100    | 
| 5   | title5 | desc5  | 100    | 
| 6   | title6 | desc6  | 100    | 

select * from SectionMembers;

| SectionMembers_id | section_id | status_code | memberid | 
------------------------------------------------------------ 
| 1     | 1   | 10   | 200  | 
| 2     | 1   | 20   | 300  | 
| 3     | 2   | 30   | 200  | 
| 4     | 2   | 10   | 300  | 
| 5     | 3   | 30   | 200  | 
| 6     | 4   | 20   | 200  | 

select * from MemberStatus;

| MemberStatus_id | status_code | status   | 
--------------------------------------------------- 
| 1    | 10   | PENDINGMEMBER | 
| 2    | 20   | ACTIVEMEMBER | 
| 3    | 30   | MEMBERREJECTED | 

Tôi đã từng tham gia để có được kết quả như

select distinct(a.section_id) as id, 
     a.title, 
     a.description, 
     c.status 
from Sections a 
left join SectionMembers b on a.section_id = b.section_id 
inner join MemberStatus c on b.status_code = c.status_code 
where (a.section_ownerid = 100 and b.memberid = 200) 
     or (a.section_ownerid = 100); 

Nhưng tôi không nhận được kết quả chính xác. Tôi muốn kết quả như hình dưới đây:

| section_id | title | description | status   | 
------------------------------------------------------ 
| 1   | title1 | desc1  | PENDINGMEMBER | 
| 2   | title2 | desc2  | ACTIVEMEMBER | 
| 3   | title3 | desc3  | MEMBERREJECTED | 
| 4   | title4 | desc4  | ACTIVEMEMBER | 
| 5   | title5 | desc5  | NULL   | 
| 6   | title6 | desc6  | NULL   | 

Trả lời

11

Nó có vẻ như các truy vấn sau đây là những gì bạn cần. Chú ý rằng các bộ lọc cho memberid = 200 đã được chuyển đến điều kiện tham gia:

select s.section_id, 
    s.title, 
    s.description, 
    m.status 
from Sections s 
left join SectionMembers sm 
    on s.section_id = sm.section_id 
    and sm.memberid = 200 
left join MemberStatus m 
    on sm.status_code = m.status_code 
where s.section_ownerid = 100; 

Lưu ý: trong khi kết quả mong muốn của bạn cho thấy section_id=2 có một trạng thái của ActiveMember không có cách nào trong dữ liệu mẫu của bạn để làm cho liên kết giá trị này phần 2.

truy vấn này cho kết quả tốt:

| SECTION_ID | TITLE | DESCRIPTION |   STATUS | 
------------------------------------------------------ 
|   1 | title1 |  desc1 | PendingMember | 
|   2 | title2 |  desc2 | MemberRejected | 
|   3 | title3 |  desc3 | MemberRejected | 
|   4 | title4 |  desc4 | ActiveMember | 
|   5 | title5 |  desc5 |   (null) | 
|   6 | title6 |  desc6 |   (null) | 
+0

này làm việc hoàn toàn tốt. Cảm ơn bluefeet. – Bhargav

+0

@BhargavBonu bạn được chào đón! :) – Taryn

+0

Điều đó đã giúp! 1 – normalUser

0

Ở đây bạn đi:

SELECT s.section_id, s.title, s.description, ms.status 
FROM Sections as s 
LEFT JOIN SectionMembers as sm ON s.section_id = sm.section_id 
LEFT JOIN MemberStatus as ms ON ms.status_code = sm.status_code 
WHERE (s.section_ownerid = 100 and sm.memberid = 200) 
    OR (s.section_ownerid = 100) 
GROUP BY section_id 

Lưu ý: cập nhật câu trả lời của tôi