Sql 如何在insert into中使用子查询?
我试图使用子查询从Sql 如何在insert into中使用子查询?,sql,oracle,subquery,Sql,Oracle,Subquery,我试图使用子查询从dname列将数据插入emp_danil表 我有一个疑问: INSERT INTO emp_danil (dname) SELECT dept.dname FROM dept, emp_danil demp WHERE dept.deptno = emp_danil.deptno; 查询前的表 +------+--------+-------+ | DATA | DEPTNO | DNAME | +------+--------+-------+ |
dname
列将数据插入emp_danil
表
我有一个疑问:
INSERT INTO emp_danil (dname)
SELECT dept.dname
FROM dept, emp_danil demp
WHERE dept.deptno = emp_danil.deptno;
查询前的表
+------+--------+-------+
| DATA | DEPTNO | DNAME |
+------+--------+-------+
| ... | 10 | NULL |
| ... | 20 | NULL |
| ... | 30 | NULL |
+------+--------+-------+
“部门”表
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW_YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
+--------+------------+----------+
查询后的表格:
+------+--------+-------------+
| DATA | DEPTNO | DNAME |
+------+--------+-------------+
| ... | 10 | ACCOUNTING |
| ... | 20 | RESEARCH |
| ... | 30 | SALES |
+------+--------+-------------+
错误:
ORA-01400:无法将NULL插入(“学生”、“EMP_DANIL”、“EMPNO”)
我想您需要
更新:
update emp_danil e
set dname = (select d.dname from dept d where d.deptno = e.deptno);
也就是说,您不应该存储dname
两次。它应该只在dept
表中。您可以使用deptno
和适当的JOIN
synax获取名称。您的查询对我来说没有意义。我想知道您是想要插入
查询(创建新记录)还是更新
(修改现有记录)。样本数据和预期结果将有助于更好地理解您的问题。样本数据和预期输出??应该很清楚,您只是试图填充emp_danil.dname
列,而存在其他一些具有notnull
约束的列。INSERT
表示“创建新行”<代码>更新
表示“更改现有行中的列值”。