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