MySQL,两列共享相同的连接

MySQL,两列共享相同的连接,mysql,join,Mysql,Join,现在我得到了用户ID、国家、城市、地区,但是这个组(roleid-sup_角色的复合角色)有点夸张。组是一个复合名称,由以下部分组成: 罗莱德 辅助角色 我们有一个工作角色表,我们正在链接到像经理,工程师,销售,上午,下午,任何名称 因此,PM-Engineer就是一个例子。我得到的roleid部分工作得很好,但不理解我在第二部分中做错了什么(我已经尝试了10件事情,从多次显示任何具有sup_角色的人,到仅显示具有sup_角色的人,并非每个人都有)。因此,我有一个用于两个不同字段的联接,这两

现在我得到了用户ID、国家、城市、地区,但是这个组(roleid-sup_角色的复合角色)有点夸张。组是一个复合名称,由以下部分组成:

  • 罗莱德
  • 辅助角色
我们有一个工作角色表,我们正在链接到像经理,工程师,销售,上午,下午,任何名称

因此,PM-Engineer就是一个例子。我得到的roleid部分工作得很好,但不理解我在第二部分中做错了什么(我已经尝试了10件事情,从多次显示任何具有sup_角色的人,到仅显示具有sup_角色的人,并非每个人都有)。因此,我有一个用于两个不同字段的联接,这两个字段都只包含同一列联接表的ID

所以现在我得到了Engineer-9,9是sup_角色的ID,如果根据sup_角色从表中获取该名称,那么它应该是Developer


注意:我首先在逻辑上使用了
左连接报告\u jobroles ON reports\u straddons.sup\u role=reports\u jobroles.nameid
,但可惜这根本不起作用。

我想我能理解。问题是您需要加入一个表两次,但只加入一次。问题的简化版本如下所示:

SELECT
COALESCE (reports_straddons.employeeid, ldap_karen.uid) as uid,
COALESCE (reports_straddons.thomslocationcountrydescr, ldap_karen.thomslocationcountrydescr, 'NOVALUE') as thomslocationcountrydescr,
COALESCE (reports_straddons.thomslocationcity, ldap_karen.thomslocationcity, 'NOVALUE') as thomslocationcity, 
COALESCE (reports_straddons.regionname, ldap_karen.regionname) as regionname,
CONCAT(reports_jobroles.groupabrev, COALESCE(CONCAT(' - ', reports_straddons.sup_role),'')) as sa_title,
ldap_karen.created
FROM
reports_straddons
LEFT JOIN ldap_karen ON reports_straddons.employeeid = ldap_karen.uid 
LEFT JOIN reports_jobroles ON reports_straddons.roleid = reports_jobroles.nameid
SELECT 
COALESCE (reports_straddons.employeeid, ldap_karen.uid) as uid,
CONCAT(reports_jobroles.groupabrev, COALESCE(CONCAT(' - ', reports_straddons.sup_role),'')) as sa_title
FROM
reports_straddons
LEFT JOIN reports_jobroles ON reports_straddons.roleid = reports_jobroles.nameid
要修复它,您需要执行以下操作:

SELECT
COALESCE (reports_straddons.employeeid, ldap_karen.uid) as uid,
COALESCE (reports_straddons.thomslocationcountrydescr, ldap_karen.thomslocationcountrydescr, 'NOVALUE') as thomslocationcountrydescr,
COALESCE (reports_straddons.thomslocationcity, ldap_karen.thomslocationcity, 'NOVALUE') as thomslocationcity, 
COALESCE (reports_straddons.regionname, ldap_karen.regionname) as regionname,
CONCAT(reports_jobroles.groupabrev, COALESCE(CONCAT(' - ', reports_straddons.sup_role),'')) as sa_title,
ldap_karen.created
FROM
reports_straddons
LEFT JOIN ldap_karen ON reports_straddons.employeeid = ldap_karen.uid 
LEFT JOIN reports_jobroles ON reports_straddons.roleid = reports_jobroles.nameid
SELECT 
COALESCE (reports_straddons.employeeid, ldap_karen.uid) as uid,
CONCAT(reports_jobroles.groupabrev, COALESCE(CONCAT(' - ', reports_straddons.sup_role),'')) as sa_title
FROM
reports_straddons
LEFT JOIN reports_jobroles ON reports_straddons.roleid = reports_jobroles.nameid

注意,我两次加入reports\u jobroles,并给它起了不同的名字。我假设
sup_role
将加入
nameid
字段,就像
roleid

我看不到任何一个组,它是如何“顶起”的?你得到了什么?你期望得到什么?没有这些信息的SQL中没有明显的错误。@JoePhilllips-你说的组是什么意思?@mkasberg-几乎不管怎样,我都无法让第二个字段显示除ID以外的任何内容。我添加了更多信息-如果还有什么可以添加的,请告诉我。但是我尝试了一系列方法来显示sup_角色,它要么显示sup_角色的ID,要么显示roleid字段中的名称-只是重复而已。@blankip你说的组是什么意思?“但是这群人有点紧张,”谢谢。很令人沮丧的是,我自己无法做到这一点。我认为您需要将“=reports\u jobroles”更改为“roles”和“suproles”,您是100%。看起来4-5个版本之前,我还是一样的,但在另一条死胡同里,我又犯了一个类似的错误。我没有在任何地方运行它,所以我没有任何语法检查。。。