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
现在我正在获取用户ID,国家/地区,城市,地区,但该组(roleid的复合角色 - sup_role)有点笨拙。该组是由以下组成的复合名称:
我们有一个工作角色表,我们正在链接到管理员,工程师,销售,上午,下午等名称。
一个例子就是PM - Engineer。我得到了很好的工作,但没有理解我在第二部分做错了什么(我尝试了10件事,其中包括多次出现sup_role的人,只显示有sup_roles的人 - 不是每个人都有) 。所以我有一个用于两个不同字段的连接,这两个字段只包含同一列的连接表的ID。
所以现在我正在使用Engineer - 9,9作为sup_role的ID,如果它应该读取Developer,如果根据sup_role从表中获取该名称。
注意:我首先在逻辑上使用了LEFT JOIN reports_jobroles ON reports_straddons.sup_role = reports_jobroles.nameid
但是这根本不起作用。
答案 0 :(得分:2)
我想我明白了。问题是你需要两次加入一个表,但你只需加入一次。您问题的简化版本如下所示:
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,
CONCAT(roles.groupabrev, COALESCE(CONCAT(' - ', suproles.groupabrev),'')) as sa_title
FROM
reports_straddons
LEFT JOIN reports_jobroles roles ON reports_straddons.roleid = roles.nameid
LEFT JOIN reports_jobroles suproles ON reports_straddons.sup_role = suproles.nameid
注意我是如何加入reports_jobroles两次,并将其命名为不同的东西。我假设sup_role
将加入nameid
字段,就像roleid
一样。