【问题标题】:Update field from one table to another if exist, else null如果存在,则将字段从一个表更新到另一个表,否则为空
【发布时间】:2021-01-06 01:49:48
【问题描述】:

我有两个表(列)Employee(ID, EmployeeName, FK_DepartmentID)Department(ID, DepartmentName),其中我的Employee 表保存员工的数据并设置部门的外键。 Relational DBDepartment TableEmployee Table

现在在我的 VB 代码中,我有一个员工姓名文本框和一个部门组合框,用户可以从中更新员工姓名和部门。所以我想更新员工表的名称以及部门的外键,所以我使用了:

UPDATE Employee e, (SELECT d.ID FROM Department d Where d.DepartmentName = @dept) As d 
SET e.FK_Department = d.ID, e.EmployeeName = @name
WHERE ((e.ID)='3') ;

这似乎工作正常。但我希望我的部门组合框是可选的。在哪里不能选择它,如果是这样,Employee 表中的FK_Department 将为 NULL。但是,如果我在没有任何 @dept 值的情况下运行查询,则查询会创建 0 个有意义的新行,因为我的 (SELECT d.ID FROM Department d Where d.DepartmentName = @dept) 什么也不返回。如何更新查询以获得结果?

我也尝试过加入但不确定在哪里申请Where d.DpartmentName = @dept,尝试过Set e.FK_Department = IIF((Select ID From Department Where DepartmentName = @dept) Is Null, Null, Department.ID),但似乎不起作用。

旁注:不确定我的问题是否是 Upsert。因为最后我还是在更新Employee Table,还是我的想法错了?

如果可能的话,您的帮助将挽救生命。提前谢谢你。

【问题讨论】:

  • 这是VB还是VBA?添加适当的标签。如果没有提供部门 ID,则不要构建依赖于它的 SQL。使用条件代码构建有效的 SQL。
  • 它是 VB,我需要我试图在 MS-access 中构建的查询。所以你是说查询不可能,但我必须有条件地构建查询字符串?
  • 如我所说,为编程语言编辑标签。

标签: ms-access foreign-keys ado.net relational-database


【解决方案1】:

使用子查询如下:

UPDATE Employee e
   Set e.EmployeeName = @name,
       e.FK_Department = coalesce((select d.ID FROM Department d Where d.DepartmentName = @dept),
                                  e.FK_Department)
WHERE e.ID='3' ;

【讨论】:

  • 感谢您的回复。在表达式错误中获取未定义函数“coalesce”。尽管尝试使用 NZ 进行访问,但仍然收到错误“操作必须使用可更新查询”。
猜你喜欢
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多