作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表,其中包含给定“项目”的“工作”,我想从每个项目的表中获取下一行。
TABLE project { id, name }
TABLE work {id, project_id, value, done}
一次获取一项新工作直至全部完成的正确、高性能查询是什么?以下查询不起作用,并且将选择列替换为 min(columnhere)
会导致多行结果不匹配。
SELECT w.id, p.name, w.value FROM work w
LEFT JOIN project p ON p.id = w.project_id
GROUP BY project_id
上述查询的结果应如下所示:
34, "Project 1", "Work 43", "..."
21, "Project 2", "Work 10", "..."
321, "Project 3", "Work 86", "..."
最佳答案
如果我正确地阅读了您的问题,并且您每个项目一次需要一项(尚未完成)工作,那么正在寻找类似的东西
SELECT n.id, n.project_id, p.name project, w.value work
FROM
(
SELECT project_id, MIN(id) id
FROM work
WHERE done = 0
GROUP BY project_id
) n JOIN work w
ON n.id = w.id JOIN project p
ON n.project_id = p.id
说明:
work
以根据id获取所有其他工作值projects
以获取项目名称示例输出:+------+------------+-----------+---------+| id | project_id | project | work |+------+------------+-----------+---------+| 43 | 34 | Project 1 | Work 43 || 10 | 21 | Project 2 | Work 10 || 86 | 321 | Project 3 | Work 86 |+------+------------+-----------+---------+
关于MySQL GROUP BY 表中的下一行用于外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399473/
我是一名优秀的程序员,十分优秀!