2017-10-29 7 views
2

と出力リスト私は3つのテーブルでこのリレーショナルデータベースを持っている:
MYSQL:条件

メンバー表

id member 
1 Tina 
2 John 
3 Ellis 
4 Dave 

プロジェクト表

id name  year 
1 summer 2014 
2 spring 2015 
3 winter 2016 

加入者テーブル

id members_id project_id 
1  1   2 
2  1   3 
3  2   1 
4  2   3 
5  3   1 
6  4   2 
7  4   1 

Wh私が探しているのは、メンバーごとに購読している最新のプロジェクトを出力するMYSQLクエリです。だから、クエリは、この結果得られます:

member  name 
Tina  winter 
John  winter 
Ellis  summer 
Dave  spring 

を私は

SELECT members.member, projects.name 
FROM members 
JOIN subscribers ON members.id = subscribers.members_id 
JOIN projects ON projects.id = subscribers.projects_id 

このクエリを持っている。しかし、これは私のメンバーとそれぞれのプロジェクト名で7行を示します。 私は上記のように最新のプロジェクト名で4人のメンバーだけを欲しいです。

私には何が欠けていますか?

答えて

1

これは動作するはずです:

SELECT `members`.`member`, `projects`.`name` 
FROM `members` 
    JOIN (SELECT `members_id` , MAX(`project_id`) AS `project_id` 
     FROM `subscribers` GROUP BY subscribers.`members_id`) AS `latest` 
    ON `members`.`id` = `latest`.`members_id` 
    JOIN `projects` ON `projects`.`id` = `latest`.`project_id` 
ORDER BY `members`.`id`; 
+0

素晴らしい! 'AS project_id'を追加することはそのトリックを行いました。 – Jojoseph

1
SELECT members.member, projects.name 
FROM members 
JOIN (SELECT members_id, MAX(project_id) AS projects_id FROM 
     subscribers GROUP BY members_id) S 
ON members.id = s.members_id 
JOIN projects 
ON projects.id = s.projects_id 

上記のクエリはid増加YearとしてProjectテーブルにおいても増加(又は減少しない)、という仮定の下で動作します。

+0

あなたのクエリがエラーを与える:すべての新しいプロジェクトは今年増加します: そして実際、「不明な列が 『節に』に 『s.projects_id』」。 – Jojoseph

+0

@Jojoseph 'MAX(project_id)as projects_id' –