SQL将null值更新为外键

时间:2016-03-28 01:17:29

标签: sql oracle subquery

我有两张桌子:
员工(employee_ID主键)(外键Department_id引用部门(department_id))

employee_id First_name  Last_name  Department_id  Salary  Commission
154 Aaan Eaan 80 6000 0.2
166 Baan Faan 80 7000 0.1
167 Caan Gaan 80 7000 0.3
169 Daan Haan 80 8000 0.4

部门(Department_id主键)

Department_id  Dept_name  location
10 AA 1700
40 BB 1800
70 CC 1900
80 DD 2000

我有以下更新代码

UPDATE employee a
SET department_id=(select department_id 
                   from departments
                   where location = 2100),
    (salary,comission)=(select 1.1*AVG(salary), 1.5*AVG(comission)
                        from employee b
                        where a.department_id = b.department_id)
where first_name||' '||last_name = 'Caan Gaan';

我的问题是上面的代码会执行吗?在department表中没有位置2100,是否会插入空值?请帮忙

4 个答案:

答案 0 :(得分:1)

上面的代码将被执行。是的,在这种情况下插入空值。请在此处阅读oracle文档 - http://docs.oracle.com/cd/B19306_01/server.102/b14220/data_int.htm#sthref3085

它将为您提供在外键列中插入空值的主要概念。

由于

答案 1 :(得分:0)

将插入NULL

您正在使用标量子查询设置department_id。这样的子查询只返回一列,最多只返回一行。如果结果集中没有行,则值为NULL

如果某个地理位置可能有多个部门,那么您的查询就很危险。如果它返回多个值,那么您将收到错误。一种解决方案是添加where rownum = 1。另一种方法是使用聚合函数来确保只返回一个值。

答案 2 :(得分:0)

它要么回来了:

1)null

OR

2)如果department_id设置为NOT NULL或者是主键

,则出错

答案 3 :(得分:0)

考虑到您的列应该接受NULL值。

如果将列NOT NULL设置为空,则可以轻松地在Table design视图中将其更改为nullable: 右键点击表格,设计,然后检查允许为空。