如何在插入中使用子查询? [关闭]

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 来获取名称。

【讨论】:

以上是关于如何在插入中使用子查询? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在查询中使用 $push 将数据插入子文档,而不是检索文档并将其保存回来

如何使用子查询的多行返回值插入表中?

如何使用具有多个结果的子查询将值插入表中?

如何从内部子查询中获取组合输出? [关闭]

VB.Net/Access SQL 插入子查询问题

我将如何同时插入具有所有不同子查询值的同一行,几乎就像通过子查询进行迭代一样?