繁体   English   中英

sql在Oracle中的选择查询上缺少表达式

[英]sql missing expression on select query in oracle

我试图摆脱重复的工作角色,然后再将数据输入到我的实际尺寸表中,每次运行脚本时,我都会不断遇到表达式错误,并且不确定为什么,任何帮助将不胜感激。

INSERT INTO job_role_dim (
SELECT job_role_id.nextval, DISTINCT job_role_desc
FROM temp_job_role_dim);

您不应在查询前后加上括号,并且将您的distinct放在错误的位置。 您可能正在尝试避免这样做:

INSERT INTO job_role_dim
SELECT DISTINCT job_role_id.nextval,job_role_desc
FROM temp_job_role_dim;

...不会删除重复项,而只是给它们不同的序列值。 因此,您需要一个子查询:

INSERT INTO job_role_dim
SELECT job_role_id.nextval, job_role_desc
FROM (
  SELECT DISTINCT job_role_desc
  FROM temp_job_role_dim
);

内联视图查找不同/唯一值; 然后,外部查询会为每个查询提供序列值。

这是对亚历克斯答案的详尽阐述。 编写此查询的更好方法是使用select的列列表。 通常这是一个非常好的主意-以及其他原因,而不仅仅是查询中的括号。 所以:

INSERT INTO job_role_dim(job_role_id, job_role_desc) -- making up these column names
    SELECT job_role_id.nextval, job_role_desc
    FROM (SELECT DISTINCT job_role_desc
          FROM temp_job_role_dim
         ) t;

也就是说,SQL希望表后的括号包含列列表。 并且,这就是应该编写INSERT语句的方式。 包含子查询时,解析器会感到困惑,因为它需要列列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM