【问题标题】:Is there an SQL INSERT INTO query that allows me to insert multiple rows from subquery plus predetermined data?是否有一个 SQL INSERT INTO 查询允许我从子查询和预定数据中插入多行?
【发布时间】:2023-01-11 13:42:17
【问题描述】:

我有一个课堂练习,我必须在老师的桌子上插入一位新老师。教师表有:

-学校代码 (COD_CENTRO) 参考学校表 -教师ID(DNI)主键 -姓氏 (APELLIDOS) -部门(特别是)

作为条件,使用的学校代码必须是那些只有 1 名员工被设计为行政人员的代码。从中我得到两个不同的学校代码。

此外,我必须添加教师 ID、姓氏和部门,这些在练习文本中确定(ID 为 8790055,姓氏为“Clara Salas”,部门为“IDIOMAS”)。

我从这个和练习描述中得到的是,我必须在 Teachers 表中插入两个新行,这将具有相同的教师信息(ID、姓氏、系),但学校代码不同。

截至目前,我正在使用 Oracle APEX 中的工作区,并且我写了以下语句:

INSERT INTO PROFESORES (COD_CENTRO, DNI, APELLIDOS, ESPECIALIDAD)
VALUES (
    (SELECT COD_CENTRO
    FROM PERSONAL
    WHERE FUNCION LIKE 'ADMINISTRATIVO'
    GROUP BY COD_CENTRO
    HAVING COUNT(FUNCION) = 1),

    8790055, 'Clara Salas', 'IDIOMAS');

子查询完美地工作,因为它返回两个与表中的数据输入一致的值。问题是我得到了这个错误:

ORA-01427: 单行子查询返回多行

经过一番调查,我明白这是因为 INSERT INTO...VALUES 只能插入一行,而我的子查询返回两个值,因此出现错误。

我的问题是:有什么方法可以在一条语句中使用两种代码和相同的教师信息来插入两个新行?或者也许是另一种方式,即使它不在一个声明中?

我考虑过先用两个代码创建两行,然后将“静态”数据添加到两行,但我无法找到识别两行的方法来添加我的数据(可能使用 IS NULL ?);还有一个事实是,如果不添加主键我就无法创建任何行,这是我不知道如何克服的另一个错误。

我的另一个想法是创建两个 INSERT INTO...VALUES,在每个中我可以通过添加一个代码来使用两个值之一,该代码允许我从子查询中只选择一个行,另一个在另一个中陈述。

我已经在脑海中盘旋了几个小时,因为我是新手,所以我可以看到自己的局限性;为此,我希望得到一些帮助来解决这个问题:)

【问题讨论】:

标签: sql oracle select oracle-apex sql-insert


【解决方案1】:

您可以尝试以下查询 -

INSERT INTO PROFESORES (COD_CENTRO, DNI, APELLIDOS, ESPECIALIDAD)
    SELECT COD_CENTRO, 8790055, 'Clara Salas', 'IDIOMAS'
      FROM PERSONAL
     WHERE FUNCION LIKE 'ADMINISTRATIVO'
     GROUP BY COD_CENTRO
    HAVING COUNT(FUNCION) = 1;

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2014-08-26
    • 2016-10-10
    • 1970-01-01
    • 2011-12-26
    • 2018-12-13
    相关资源
    最近更新 更多