2016-11-16 50 views
0

我有一张表,每个人的电子邮件地址只有一次在他们的成员ID旁边,但我想创建在同一行中具有领导电子邮件地址的列。基于现有表的条件创建新的列

表1

+-----------+--------+----------+----------+---------+ 
| member_id | name | Email | Dir_ID | Leader_ID| 
+-----------+--------+----------+----------+---------- 
|  105 | Andri | em100 |  106 | 110 | 
|  106 | Steve |  em10 | Null | Null 
|  110 | Soraya | em101 |  110 | 110 
|  111 | Eva |  em20 |  110 | 105 
|  112 | Sonia |  em40 |  105 | 111 

我试图完成以下

查询/生成的表

+-----------+--------+----------+----------+-------------+ 
| member_id | name | Email | Dir_Email| Leader_EMail| 
+-----------+--------+----------+----------+-------------+ 
|  105 | Andri | em100 |  em10 | em101  | 
|  106 | Steve |  em10 |  Null | Null 
|  110 | Soraya | em101 |  em10 | em10 
|  111 | Eva |  em20 | em101 | em100 
|  112 | Sonia |  em40 |  em100| em20 

从哪里开始,将不胜感激的任何信息。我正在考虑创建一个昏暗的桌子,然后做一些连接,但是认为必须有一个更简单的方法。

+0

我想你可能需要给我们一点点的更多信息。你从哪里得到'Dir_Email'和'Leader_EMail' – RiggsFolly

+0

所以你想改变表1为表2.我是对的? – RiggsFolly

+0

@RiggsFolly对不起,它可能并不清楚,但'Member_Id'是每个人的唯一代码,每个人都会在那里显示,'Dir_ID'&'Leader_ID'come只是层次结构的'member_id's' –

回答

2

您可以使用基于自身的等级关系加入

select a.member_id, a.name, a.Email, b.Dir_Email, a.Leader_ID 
    from myTable as a 
    left join my_table b on a.dir_id = b.member_id 
+0

找到'emai''我错了,假设OP想要在现有表中创建2个新列并删除2个现有列? – RiggsFolly

+0

@scaisedge,你说我必须创建表b吗?或者可以加入自己的桌子上?第二个表是我希望从表1中产生的查询或产品 –

+2

否@AsimAhmed,是同一个表'myTable',但使用别名'a'和'b'来执行'SELF JOIN' –