mysql - 在 MySQL 中对两个表中的数据进行分组

标签 mysql sql

我有 2 个表,postsposts_flagsposts 包含用户发表的帖子行。现在,如果某个帖子被举报,用户可以举报该帖子,从而在 posts_flags 表中创建一个标志。所以基本上,posts_flags 可以为同一个帖子有多个标志。

现在,我要做的是从 posts 表中获取 posts 行并添加一列以显示已标记的列。为了获得该列,我尝试使用 post_idpostsposts_flags 进行 INNER JOIN。但是,我现在遇到了一个问题,因为 posts_flags 可以为同一个帖子包含多行。

如何获取这些数据?下面是我的表格的示例结构以及我想要实现的目标。

帖子表

| post_id | post_title | post_body |
|    1    |   title a  | something |
|    2    |   title b  | something |
|    3    |   title c  | something |

posts_flags 表

| post_id | user_id |
|    1    |   4     | 
|    1    |   5     | 
|    2    |   5     | 

我正在努力实现的目标

|  post_id | post_title | post_body | flagged
|    1     | title a    | something |   1
|    2     | title b    | something |   1
|    3     | title c    | something |   0

谢谢!

最佳答案

不要加入整个表,而是加入一个子查询,每个帖子 ID 只返回 1 行。

它还需要是 LEFT JOIN 而不是 INNER JOIN,因此结果将包含没有标志的帖子的行。

SELECT p.*, pf.post_id IS NOT NULL AS flagged
FROM posts AS p
LEFT JOIN (
    SELECT DISTINCT post_id
    FROM posts_flags) AS pf ON p.post_id = pf.post_id

关于mysql - 在 MySQL 中对两个表中的数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57860010/

相关文章:

mysql - 无法在 sysbench 上找到 oltp 测试

mysql - 将 mysqldump 从 bash 脚本重定向到文件

mysql - SQL UNION 不适用于 2 个 HAVING 子句

mysql - 读到行尾

sql - 使用 pg_search 的 Postgres 全文搜索 - 包括(:child_model) breaks the SQL with 'missing FROM-clause entry for table ' child_model'

sql - Azure DevOps SQL 数据库部署

mysql - 查询仅适用于 PHPMyAdmin

php - 使用自定义 SQL 的学说子查询

php - 调用非对象 MySQLi 上的成员函数 bindParam()

mysql - App Engine 中的 GoLang 动态 SQL 查询