首页 > 解决方案 > MySQL Select Left Join 同一张表中的多个列

问题描述

我在主项目工作流表中有需要与用户表中的一个对象相关的对象。我面临的问题是当我进行 LEFT JOIN 时,我一次只能关联一个对象。

我需要做的关系是:

workflowUID = user_id
assignedTo   = user_id

我相信问题是由我的 引起的LEFT JOIN,但是,我不知道我需要使用哪个 join 语句来建立这种关系。

用户表

用户 ID | 用户名 | 用户姓氏
1 | 乔 | 史密斯
2 | 约翰 | 能源部

主项目表

项目ID | 项目名称 | 项目描述 | 项目截止日期 | 项目分配给
1 | 测试标题 | 项目描述 | 11-06-2018 | 2

主项目工作流表已编辑

项目ID | 客户识别码 | 工作流UID | 分配给
1 | 1 | 1 | 2

projectID 与另一个名为 mainProjects 的表相关联,该表列出了有关项目的更多信息,例如项目标题、创建/到期日期、创建者、工作量(小时)、项目描述。

CID 存储在主项目工作流表中。它是提交 ID。稍后将用于编辑/删除评论等内容。

输出

工作流程创建者 | 分配给的工作流
乔·史密斯 | 约翰·多伊

SQL:

SELECT *
FROM mainprojectworkflow 
LEFT JOIN user ON mainprojectworkflow.workflowUID = user.user_id
WHERE projectID = $projectID
ORDER BY cid DESC

第二个我尝试在 mainprojectworkflow.workflowUID = user.user_id 上设置第二个 LEFT JOIN 用户,但是作为 mainprojectworkflow.assignedTo 我得到了一个不唯一的表/别名用户。我相信这是因为我已经将用户表设置为 mainprojectworkflow。

编辑 对不起,我应该更清楚发生了什么。

结束结果:我的计划是使用 SQL 选择数据并在网站上以 PHP 显示。这是一个项目管理网站。我希望能够让 PHP 从 SQL 中提取变量,以便我可以使用它们,但我觉得合适。

标签: mysqlsql

解决方案


您将需要加入两次表用户,如下所示:

SELECT
    mpw.workflowUID,
    CONCAT(cu.user_firstName, " ", cu.user_lastName) AS "Workflow Created By",
    mpw.assginedTo,
    CONCAT(au.user_firstName, " ", au.user_lastName) AS "Workflow Assigned To"
FROM
    mainprojectworkflow AS mpw
INNER JOIN
    user AS cu ON cu.user_id = mpw.workflowUID
INNER JOIN
    user AS au ON au.user_id = mpw.assignedTo
WHERE
    projectID = $projectID
ORDER BY
    cid DESC

推荐阅读