【问题标题】: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 表示“更改现有行中的列值”。

标签: sql oracle subquery


【解决方案1】:

我想你想要update:

update emp_danil e
    set dname = (select d.dname from dept d where d.deptno = e.deptno);

也就是说,您不应该将dname 存储两次。它应该只在dept 表中。您可以使用deptno 和正确的JOIN synax 来获取名称。

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多