sql在oracle中的select查询中缺少表达式

时间:2015-12-28 18:23:04

标签: sql oracle

我想在将数据输入到我的实际维度表之前摆脱重复的工作角色,每次我运行我的脚本时我都会得到一个缺失的表达式错误,我不知道为什么,任何帮助都会受到赞赏。

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

2 个答案:

答案 0 :(得分:3)

您不应该在查询周围使用括号,并且您的 1 9 12 23 2 8 9 20 3 7 13 18 4 8 10 15 5 7 13 10 6 6 9 8 7 5 8 12 8 4 10 6 9 3 9 12 10 4 7 6 位置错误。你可能试图避免这样做:

distinct

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

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

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

答案 1 :(得分:1)

这是亚历克斯答案的详细说明。编写此查询的更好方法是使用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语句。当您包含子查询时,解析器会感到困惑,因为它期望列列表。