11

Mysql を使用していますが、SELECT クエリから結果を取得するのに苦労しています。私は3つのテーブルを持っています。最初のテーブル セクション、2 番目のテーブル セクションのメンバー、および 3 番目のテーブル セクションのメンバーのステータス (このテーブルのデータは静的です)。

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 |

結合を使用して結果を取得しました

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); 

しかし、正しい結果が得られません。以下に示すような結果が必要です。

| 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           |
4

2 に答える 2

20

次のクエリが必要なようです。のフィルターmemberid = 200が結合条件に移動したことに注意してください。

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;

注: 目的の結果は、サンプル データでこの値をセクション 2 にリンクする方法がないsection_id=2というステータスを示しています。ActiveMember

このクエリの結果は次のとおりです。

| 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) |
于 2013-02-12T10:57:20.607 に答える
1

どうぞ:

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

注:私の答えを更新しました

于 2013-02-12T10:41:15.153 に答える