问题描述
我有两个表(列)Employee(ID,EmployeeName,FK_DepartmentID)
和 Department(ID,DepartmentName)
,其中我的 Employee
表保存员工的数据并设置部门的外键。 Relational DB Department Table Employee 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') ;
这似乎工作正常。但我希望我的部门组合框是可选的。如果不能选择,则 FK_Department
表中的 Employee
将为 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。因为最后我还是更新了员工表,还是我的想法错了?
如果可能,您的帮助将挽救生命。提前致谢。
解决方法
使用子查询如下:
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' ;