mysql - 如何选择名称,最大值(连接名称的表中的值)?

标签 mysql sql

摘要:我有一个论坛,其中包含 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/

相关文章:

php - 多类别加入 group_concat 和类别搜索

sql - 将两列结果合并为一列 - SQL

c++ - 将 Qt 连接到数据库

php - cakephp中特定字段的数据转义删除

mysql - 分割字符串过程找不到表

mysql - SQL 按选择排序

从两个表进行mysql反向文本搜索

javascript - 出现语法错误 : missing ) after argument list

php - 将 SQL 数据放入 HTML 表

mysql - 使用 PDO 的资源链接标识符?