【问题标题】:Joining many-to-one with MySQL与 MySQL 进行多对一连接
【发布时间】:2022-06-15 00:26:03
【问题描述】:

我目前在针对我正在开发的一个小型项目管理 CMS 进行 MySQL 查询时遇到问题。我有两张桌子;项目和项目信息。项目表定义了主键、创建日期(时间戳)、projectType 和 creatorId(最初创建项目的经理)。

projectInfo表包含一个主键,projectId(链接到projects表的主键),userId(修改项目的用户),updatedTimestamp,projectName & projectDescription。

关键是经理可以创建一个项目,从 projectName 和 projectDescription 开始,然后其他用户可以自己更改 projectName 和 projectDescription,留下谁创建项目的日志,以及谁已经在每一步编辑项目。

所以有很多 projectInfo 记录指向同一个项目,而最近的 projectInfo 记录是该项目的最新迭代。我想要一个列出项目表中所有记录的查询,但还包含最新的单数 updatedTimestamp、projectName、projectDescription 和 userId。

项目

| id | timestamp           | projectType | creatorId |
| -- | ------------------- | ----------- | ------ |
| 1  | 2022-05-11 11:17:22 | Design      | 1      |
| 2  | 2022-05-12 11:17:22 | Production  | 2      |

项目信息

| id | projectId | userId | updatedTimestamp    | projectName | projectDescription |
| -- | --------- | ------ | ------------------- | ----------- | ------------------ |
| 1  |  1        | 1      | 2022-05-11 11:17:22 | McNuggets   | Makes chicken nuggets      |
| 2  |  1        | 2      | 2022-05-12 11:17:22 | McNuggets   | Makes chicken nuggets and burgers|
| 3  | 2         | 1      | 2022-05-13 11:17:22 | An unrelated Project | Idk yet |

我修改了一个查询。但是,缺少某些数据,例如 creatorId 和时间戳。我只得到以下字段; id、projectId、userId、updatedTimestamp、projectName 和 projectDescription。

SELECT p.*  
FROM projects AS a   
   JOIN projectInfo AS p
      ON p.id =
        ( SELECT pi.id
          FROM projectInfo AS pi
          WHERE pi.projectId = a.id
          ORDER BY pi.updatedTimestamp DESC
          LIMIT 1
        ) ;

任何帮助将不胜感激。

谢谢,瑞恩。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您缺少的字段是项目表中的字段,您忘记在查询开始时还选择a 的字段。

    【讨论】:

      【解决方案2】:

      假设您的 sql 工作正常并且您只需要项目中的列(因为这似乎是您所需要的),您需要在 SELECT 语句中包含该表的列(项目) 查询时,如下所示:

      SELECT p.*, a.*
      FROM projects AS a   
         JOIN projectInfo AS p
            ON p.id =
              ( SELECT pi.id
                FROM projectInfo AS pi
                WHERE pi.projectId = a.id
                ORDER BY pi.updatedTimestamp DESC
                LIMIT 1
              ) ;
      

      【讨论】:

        猜你喜欢
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        • 2016-08-11
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多