Fir*_*ame 4 amazon-web-services sql-insert amazon-redshift
我有一张桌子 emp -
empno int(5) identity(1,1),
ename varchar(50) default '-0',
deptname varchar(50) default '-0'
Run Code Online (Sandbox Code Playgroud)
当我使用语句时 -
insert into emp(ename, deptname) select ename, deptname from emp1;
Run Code Online (Sandbox Code Playgroud)
我从 emp1 获取所有值,但空值不是-0用null.
是什么原因 ?
根据Redshift 文档:
默认default_expr
[...]
所述default_expr表达在不指定列值的任何INSERT操作中使用。如果未指定默认值,则该列的默认值为空。
因此,当您执行时,insert into emp(ename, deptname)您确实为这两列指定了值:如果没有别的,它们是NULL. 仅当您省略列时,才会使用默认值。因此default,只有直接插入值时,值才真正有用:
insert into emp(ename, deptname) values('some_ename', default);
insert into emp(ename, deptname) values(default, 'some_deptname');
insert into emp(ename, deptname) values(default, default);
Run Code Online (Sandbox Code Playgroud)
这会给:
select * from emp order by empno;
empno | ename | deptname
-------+------------+---------------
1 | some_ename | -0
2 | -0 | some_deptname
3 | -0 | -0
(3 rows)
Run Code Online (Sandbox Code Playgroud)
INSERT说法优点:您不需要知道实际的默认值
缺点:如果您有很多列,这可能很乏味
select * from emp order by empno;
empno | ename | deptname
-------+------------+---------------
1 | some_ename | -0
2 | -0 | some_deptname
3 | -0 | -0
(3 rows)
Run Code Online (Sandbox Code Playgroud)
COALESCE优点:对default它们进行一次查询
缺点:您必须知道默认值
insert into emp(ename) select ename from emp1 where deptname is null;
insert into emp(deptname) select deptname from emp1 where ename is null;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11761 次 |
| 最近记录: |