gpt4 book ai didi

MySQL GROUP BY 表中的下一行用于外键约束

转载 作者:行者123 更新时间:2023-11-29 11:00:16 29 4
gpt4 key购买 nike

我有一个表,其中包含给定“项目”的“工作”,我想从每个项目的表中获取下一行。

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

说明:

  1. 获取每个项目尚未完成的工作的第一个 ID。这里的假设是工作是按 id 排序的。
  2. 返回到work以根据id获取所有其他工作值
  3. 加入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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com