使用来自另一张表的单列值更新特定列

时间:2019-06-17 09:44:46

标签: sql

我想使用sql查询,用来自另一个表的单个列的值更新特定列。

我要更新的特定列在WorkingTime表中。例如,我想根据表2中的IDNoDate将其值更新为1

WorkingTime表:

 IDNo   | PeriodDate | SPLP | NVLP | NBLP | PLP | BLP | MLP | SLP | VLP | NSLP |
18-031  |06/11/2017  |  0   |  0   |  0   |  0  |  0  |  0  |  0  |  0  |  0   |
18-032  |06/12/2017  |  0   |  0   |  0   |  0  |  0  |  0  |  0  |  0  |  0   |
18-033  |06/13/2017  |  0   |  0   |  0   |  0  |  0  |  0  |  0  |  0  |  0   |

我要在WorkingTime中更新的列的名称在LeaveDetails中。名称为LeaveType的列。

LeaveDetails

Contro  | IDNo   | LeaveType| DateFrom | DateTo   | NoOfDays |
000041  |18-031  |  SPLP    |06/11/2019|06/11/2019|  1       |
000042  |18-032  |  NVLP    |06/12/2019|06/12/2019|  1       |
000043  |18-033  |  PLP     |06/13/2019|06/13/2019|  1       |

查询后我的预期结果是

预期结果:

 IDNo   | PeriodDate | SPLP | NVLP | NBLP | PLP | BLP | MLP | SLP | VLP | NSLP |
18-031  |06/11/2017  |  1   |  0   |  0   |  0  |  0  |  0  |  0  |  0  |  0   |
18-032  |06/12/2017  |  0   |  1   |  0   |  0  |  0  |  0  |  0  |  0  |  0   |
18-018  |06/13/2017  |  0   |  0   |  0   |  1  |  0  |  0  |  0  |  0  |  0   |

任何人都可以帮助我进行查询,我将使用它来实现此目的。预先谢谢你。

3 个答案:

答案 0 :(得分:1)

我不清楚您要更新哪个表/列,但是可以通过子查询使用另一个表的列值来更新一个表中的列值,例如:

UPDATE TABLE_1
SET LEAVETYPE = 
(SELECT NEW_COLUMN FROM TABLE_2 WHERE PRIMARY_KEY = 'Something')
WHERE PRIMARY_KEY = 'Something'
;

答案 1 :(得分:0)

尝试使用临时表。首先将数据放入临时表,然后使用临时表数据更新主表。 或使用联接表 更新你 设置u.assid = s.assid 来自ud u     内部加入销售         u.id = s.udid

答案 2 :(得分:0)

一个方法是一系列case表达式和子查询:

update table1
    set splp = (case when exists (select 1
                                  from table2 t2
                                  where t2.idno = table1.idno and
                                        t2.perioddate = t1.perioddate and
                                        t2.leavetype = 'SPLP'
                                 )
                     then 1 else table1.splp
                end),
        splp = (case when exists (select 1
                                  from table2 t2
                                  where t2.idno = table1.idno and
                                        t2.perioddate = t1.perioddate and
                                        t2.leavetype = 'NVLP'
                                 )
                     then 1 else table1.nvlp
                end),
     . . .;

取决于数据库,还有其他方法,但是以上方法在任何数据库中都适用。