通过关系

时间:2016-08-08 08:08:26

标签: mysql sql

对模糊标题感到抱歉;如果有人有更好的选择,我会改变它!

我有两个表,其中包含项目及其元数据;还有一个项目达到的里程碑。一个项目可以有多个里程碑。

projects: id | title | .....
milestones: id | type | project_id | ...

检索具有x型里程碑的所有项目非常简单。或者从每个项目中检索最后一个里程碑。

但我现在遇到的问题是建立一个查询,它给了我所有具有一组里程碑的项目(id' s)。

所以:返回所有具有里程碑类型的项目-a AND type-d AND type-x。里程碑的数量可以变化;但总是> = 1

有人提出建议吗?

2 个答案:

答案 0 :(得分:0)

假设projects.id是项目的PK,请使用group by并使用count(*)

select p.id, count(*) milestones
  from projects p join milestones m on p.id = m.project_id
 where m.type in ('A','D','X')
group by p.id
having count(*) >= 1

如果你想拥有所有3种类型,你应该计算不同的里程碑。类型(感谢@jarlh):

select p.id, count(*) milestones
  from projects p join milestones m on p.id = m.project_id
 where m.type in ('A','D','X')
group by p.id
having count(distinct m.type) = 3

答案 1 :(得分:0)

试试这个:

SELECT distinct *
FROM projects
JOIN milestones ON projects.id = milestones.project_id
WHERE milestones.type in ('a', 'd', 'x')

DISTINCT将切断重复的项目(具有多个里程碑)。 使用JOIN确保您获得应用了任何(> = 1)里程碑的项目。