如何在插入中使用子查询? [关闭]
Posted
技术标签:
【中文标题】如何在插入中使用子查询? [关闭]【英文标题】:How to use subqueries in insert into? [closed] 【发布时间】:2020-01-04 15:05:35 【问题描述】:我正在尝试使用子查询将数据从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 插入 ("STUDENT"."EMP_DANIL"."EMPNO")
【问题讨论】:
您的查询对我来说真的没有意义。我想知道您是否想要INSERT
查询(创建新记录)或 UPDATE
(修改现有记录)。示例数据和预期结果将有助于更好地理解您的问题。
样本数据和预期输出??
应该清楚的是,您只是在尝试填充 emp_danil.dname
列,而存在一些具有 not null
约束的其他列。
INSERT
表示“创建新行”。 UPDATE
表示“更改现有行中的列值”。
【参考方案1】:
我想你想要update
:
update emp_danil e
set dname = (select d.dname from dept d where d.deptno = e.deptno);
也就是说,您不应该将dname
存储两次。它应该只在dept
表中。您可以使用deptno
和正确的JOIN
synax 来获取名称。
【讨论】:
以上是关于如何在插入中使用子查询? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章