簡體   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