【问题标题】:MySQL self-JOIN tableMySQL 自联接表
【发布时间】:2015-01-29 12:34:34
【问题描述】:

在我的论坛上,我使用带有 posts 表的数据库:

  • type 可以是问题、答案或注释('Q'、'A'、'N')
  • updated 是帖子最后更新的日期
  • postid 是标识帖子的整数
  • parentid 是一个整数,表示父帖子(NULL 表示问题,表示问题表示答案,表示问题或答案表示注释)

如何创建一个表格,将每个问题的 postid 与与之关联的最新答案/注释的 postid 相关联?

我认为这需要三重 JOIN,但这对我来说很新。

【问题讨论】:

    标签: php mysql join self-join


    【解决方案1】:

    你可以这样做:

    SELECT
      p.postid,
      answersAndNotes.postid AS AnswerOrNoteId,
      answersAndNotes.updatedDate AS AnswerOrNoteUpdateDate
    FROM posts p
    INNER JOIN
    (
       SELECT 
         parentid,
         postid,
         MAX(updated) AS updatedDate
       FROM posts
       WHERE `type` = 'A' OR `type` = 'N'
       GROUP BY postid
    ) AS answersAndNotes ON answersAndNotes.parentid = p.postid
    WHERE p.type = 'Q';
    

    子查询:

      SELECT
         parentid,
         postid,
         MIN(updated) AS updatedDate
       FROM posts
       WHERE `type` = 'A' OR `type` = 'N'
       GROUP BY postid
    

    如果您要选择注释文本或其他列,则将给您这些答案或注释,并且只给您最新的答案或注释,将它们添加到此子查询和GROUP BY。

    【讨论】:

    • 已经非常感谢了,到目前为止它做得很好,但会导致重复。因此,当我尝试将查询结果添加到我的新表(其中postid 是PRIMARY KEY)时,它会给出:MySQL 查询错误 1062:键 'PRIMARY' 的重复条目 '154'
    • @Bruno 此错误表明您在 postid 中输入的值包含一些重复的 154 值,请再次检查您的值。
    猜你喜欢
    • 2021-03-07
    • 2012-02-23
    • 2020-12-05
    • 2011-02-21
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多