摘要:我有一个论坛,其中包含 forums
表和 posts
表。每个帖子都有一个唯一的 ID(自动递增的整数),并且每个帖子都引用一个 forums.id
。
我正在尝试发出一个 SELECT
查询来检索所有论坛名称、所有论坛 ID,以及与该论坛关联的最高 posts.id
。
论坛中可能没有帖子,在这种情况下我希望 max-posts-id 为 0。
论坛表:
| ID | Name |
|----|------|
| 1 | Dogs |
| 2 | Food |
| 3 | Work |
帖子表:
| ID | Forum_ID | Author | Text |
|----|----------|--------|------|
| 42 | 1 | Mr. S | foo |
| 43 | 3 | Mr. Y | bar |
| 44 | 1 | Ms. X | baz |
| 45 | 2 | Ms. A | foo |
| 46 | 1 | Mr. M | foo |
| 47 | 3 | Ms. A | bar |
| 48 | 2 | Mr. L | baz |
期望的结果:
| Forum_ID | Name | Max_Posts_ID |
|----------|------|--------------|
| 1 | Dogs | 46 |
| 2 | Food | 48 |
| 3 | Work | 47 |
我的尝试
SELECT
forums.id AS id,
forums.name AS name,
COALESCE(MAX(SELECT id FROM posts WHERE forums.id = ?), 0)
JOIN
posts ON forums.id = posts.forum_id;
但我认为我无法将参数传递给嵌套的 SELECT
查询,我认为这不是正确的方法。我该怎么办?
最佳答案
您可以使用LEFT JOIN
和聚合:
SELECT f.id AS id,
f.name AS name,
COALESCE(MAX(p.id),0) AS Max_Posts_ID
FROM Forums f
LEFT JOIN Posts p
ON f.Id = p.forum_id
GROUP BY f.id, f.name
ORDER BY f.id;
关于mysql - 如何选择名称,最大值(连接名称的表中的值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664584/