INSERT INTO WITH SELECT 和 WHERE(问题)
Posted
技术标签:
【中文标题】INSERT INTO WITH SELECT 和 WHERE(问题)【英文标题】:INSERT INTO WITH SELECT and WHERE (Problem) 【发布时间】:2021-03-22 15:05:33 【问题描述】:我需要使用 select 执行插入,但 DBEAVER 返回以下错误:
SQL 错误 [904] [42000]:ORA-00904:“NR_CARTEIRA”:标识符无效
有谁知道它是什么?
INSERT INTO recem_nascido(
DT_ATENDIMENTO ,
CD_DECLARACAO_NASCIDO_VIVO,
cd_atendimento,
CD_MULTI_EMPRESA,
cd_paciente,
nm_paciente,
CD_ATENDIMENTO_PAI,
dt_nascimento,
nm_mae,
cd_convenio,
NR_CARTEIRA )
SELECT
a.DT_ATENDIMENTO ,
c.CD_DECLARACAO_NASCIDO_VIVO,
a.cd_atendimento,
a.CD_MULTI_EMPRESA,
a.cd_paciente,
b.nm_paciente,
a.CD_ATENDIMENTO_PAI,
b.dt_nascimento,
b.nm_mae,
a.cd_convenio,
a.NR_CARTEIRA
FROM
DBAMV.ATENDIME a,
dbamv.paciente b,
dbamv.recem_nascido c
WHERE
a.CD_ATENDIMENTO = 33079344
AND c.CD_DECLARACAO_NASCIDO_VIVO = 111
AND A.NR_CARTEIRA = 321321321
AND a.cd_atendimento_pai IS NOT NULL
AND a.CD_PACIENTE = b.CD_PACIENTE
AND c.CD_ATENDIMENTO = a.CD_ATENDIMENTO; ```
【问题讨论】:
首先猜测是您的目标表中没有名为NR_CARTEIRA
的列。
要改掉的坏习惯:using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 proper ANSI-92 SQL 标准中的 ANSI JOIN
语法(差不多 30 年前 前),不鼓励使用它
和JOIN
一起学习使用有意义的表别名。使用表格缩写而不是任意字母,查询更容易阅读。
而且可能需要 接下来的 30 年 才能使用 new-style 语法 safely everywhere
【参考方案1】:
只有两种选择:
-
目标表
recem_nascido
没有列NR_CARTEIRA
表DBAMV.ATENDIME
没有列NR_CARTEIRA
由于您只发布了查询,而不是表结构,因此无法进一步缩小范围。
【讨论】:
以上是关于INSERT INTO WITH SELECT 和 WHERE(问题)的主要内容,如果未能解决你的问题,请参考以下文章
SQL Insert into with select from multiple tables
Oracle中insert into select和select into的区别
Oracle中insert into select和select into的区别