对模糊标题感到抱歉;如果有人有更好的选择,我会改变它!
我有两个表,其中包含项目及其元数据;还有一个项目达到的里程碑。一个项目可以有多个里程碑。
projects: id | title | .....
milestones: id | type | project_id | ...
检索具有x型里程碑的所有项目非常简单。或者从每个项目中检索最后一个里程碑。
但我现在遇到的问题是建立一个查询,它给了我所有具有一组里程碑的项目(id' s)。
所以:返回所有具有里程碑类型的项目-a AND type-d AND type-x。里程碑的数量可以变化;但总是> = 1
有人提出建议吗?
答案 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)里程碑的项目。