我想使用sql查询,用来自另一个表的单个列的值更新特定列。
我要更新的特定列在WorkingTime
表中。例如,我想根据表2中的IDNo
和Date
将其值更新为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 |
任何人都可以帮助我进行查询,我将使用它来实现此目的。预先谢谢你。
答案 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),
. . .;
取决于数据库,还有其他方法,但是以上方法在任何数据库中都适用。