【问题标题】:MySQL Select Left Join multiple columns from the same tableMySQL Select Left Join 同一张表中的多个列
【发布时间】:2018-11-06 15:27:52
【问题描述】:

我在主项目工作流表中有对象,我需要与用户表中的一个对象相关联。我面临的问题是当我执行 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。稍后将用于编辑/删除 cmets 等内容。

输出

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

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 中提取变量,以便我可以使用它们,但我觉得合适。

【问题讨论】:

  • 您是否考虑过修改您的表架构?因为我认为这是Main Project Workflow 表的池设计。
  • 您能解释一下projectIDcid 是什么,或者在架构中包含这些列吗?
  • 没有projectid列
  • 我更新了问题以包含 projectID 和 CID 的信息。对不起,我应该把它包括在内。

标签: mysql sql


【解决方案1】:

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

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

【讨论】:

  • 谢谢!我做了一个小改动,从 INNER JOIN 到 LEFT JOIN,然后我添加了一些其他的。我没有意识到我的错误是由别名引起的。运行您的 SQL 代码后,我能够快速将其组合在一起。 :)
【解决方案2】:

试试这种类型的查询:

SELECT 
CONCAT_WS(' ', uc.user_firstName, uc.user_lastName) AS Workflow_Created_By, 
CONCAT_WS(' ', ua.user_firstName, ua.user_lastName) AS Workflow_Assigned_To 
FROM mainprojectworkflow 
LEFT JOIN User uc ON mainprojectworkflow.workflowUID = uc.user_id 
LEFT JOIN User ua ON mainprojectworkflow.assignedTo = ua.user_id;

【讨论】:

    猜你喜欢
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2019-05-19
    • 2012-03-15
    相关资源
    最近更新 更多