在MYSQL中修改选定结果表的列

4

这里有一些事情,我想要将表格 'responsibilities' 的字段 Name, Direct, Supervise 进行连接:

Name | Direct | Supervise
 ABC    2        4

和表'positions'一起使用,其中包含positionCode和positionID:

positionCode | positionID
   HR/HRM         2
   HR/MN          4

选择的结果表将类似于这样。
Name | Direct | Supervise
 ABC   HR/HRM    HR/MN

'直接管理'和'监督'列应该从'positions'表中取得positionCode。有没有一个一次性查询来输出这个结果?还是我必须查询2次?

你可以使用不同的名称和不同的列两次加入表格,这样就可以轻松地获得结果。 - Sami Kuhmonen
4个回答

3

尝试使用这个查询:

SELECT r.Name,
       p1.positionCode AS Direct,
       p2.positionCode AS Supervise
FROM responsibilities r
LEFT JOIN positions p1
    ON r.Direct = p1.positionID
LEFT JOIN positions p2
    ON r.Supervise = p2.positionID

输出:点击查看SQLFiddle示例

2

我认为你可以将 responsibilities 两次加入到 positions 表中:

SELECT r.Name,
       COALESCE(p1.positionCode, 'Direct is N/A') AS Direct,
       COALESCE(p2.positionCode, 'Supervise is N/A') AS Supervise
FROM responsibilities r
LEFT JOIN positions p1
    ON r.Direct = p1.positionID
LEFT JOIN positions p2
    ON r.Supervise = p2.positionID

点击以下链接查看运行演示:

SQLFiddle


1
在职责表中没有positionCode列,因此会出现“字段列表中的未知列'r.positionCode'”错误。 - Piyush Gupta
如果我将p1、p2的位置代码添加到选择中,代码对我来说就可以正常工作。无论如何,感谢您向我展示光明。 - Quang Anh Chu
@QuangAnhChu 我使用了 COALESCE() 函数来包装代码列的选择,以防某个职责没有可用的职位。在这种情况下,将向用户显示替代消息(例如 Direct is N/A)。 - Tim Biegeleisen
@TimBiegeleisen 一箭射中两个目标,我也在寻找这个功能,感谢你指出。 - Quang Anh Chu

0

尝试以下查询,应该可以正常工作

select R.Name,(select P.positionCode where R.Direct=P.positionID) as 
Direct,(select P.positionCode where R.Supervise=P.positionID) as 
Supervise from Responsibilites R, Positions P;

1
常规连接看起来比子查询好得多。 - Sami Kuhmonen

0

看看这个 SQL Fiddle,证明这个查询是有效的:

http://sqlfiddle.com/#!9/13845c/4/0

基本上,查询看起来如下:

SELECT r.Name, p1.positionCode As Direct, p2.positionCode as Supervise
FROM responsibilities r 
LEFT JOIN positions p1 ON r.Direct = p1.positionID
LEFT JOIN positions p2 ON r.Supervise = p2.positionID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接