Sql ORA-00913值太多

Sql ORA-00913值太多,sql,oracle,oracle12c,Sql,Oracle,Oracle12c,我有这个疑问 INSERT INTO hist_museum (SELECT * from of_owner.museum al JOIN (SELECT vd.city_data_id FROM of_owner.city_data vd WHERE gps_full_

我有这个疑问

INSERT INTO hist_museum (SELECT * from of_owner.museum al
                                JOIN (SELECT vd.city_data_id 
                                        FROM of_owner.city_data vd 
                                        WHERE gps_full_date < add_months(SYSDATE,-12)) vd
                                    ON al.city_data_id = VD.city_data_id);

使用select*from al JOIN。。。您从al和加入的子请求vd获取所有值。你想要的是

INSERT INTO hist_museum (SELECT al.* from of_owner.museum al
                            JOIN (SELECT vd.city_data_id 
                                    FROM of_owner.city_data vd 
                                    WHERE gps_full_date < add_months(SYSDATE,-12)) vd
                                ON al.city_data_id = VD.city_data_id);

使用select*from al JOIN。。。您从al和加入的子请求vd获取所有值。你想要的是

INSERT INTO hist_museum (SELECT al.* from of_owner.museum al
                            JOIN (SELECT vd.city_data_id 
                                    FROM of_owner.city_data vd 
                                    WHERE gps_full_date < add_months(SYSDATE,-12)) vd
                                ON al.city_data_id = VD.city_data_id);

执行插入时的最佳做法是明确列出列:

INSERT INTO hist_museum(col1, col2, . . . )
     SELECT col1, col2, . . .
     FROM of_owner.museum al JOIN
          of_owner.city_data vd 
          ON al.city_data_id = VD.city_data_id
     WHERE gps_full_date < add_months(SYSDATE, -12);
当然,SELECT中的列应该使用表名限定


此外,子查询是不必要的。没有理由只为文件管理器数据编写子查询。

执行插入时的最佳做法是明确列出列:

INSERT INTO hist_museum(col1, col2, . . . )
     SELECT col1, col2, . . .
     FROM of_owner.museum al JOIN
          of_owner.city_data vd 
          ON al.city_data_id = VD.city_data_id
     WHERE gps_full_date < add_months(SYSDATE, -12);
当然,SELECT中的列应该使用表名限定


此外,子查询是不必要的。没有理由只向文件管理器数据写入子查询。

您可能想要al.*,但您应该在select和insert中同时包含列列表。@GordonLinoff,请转换为answer您可能想要al.*,但您应该在select和insert中同时包含列列表。@GordonLinoff,请转换为answer