如何插入数据到一个表相比,另一个表wrt一些条件?
两个表的结构相同。
insert into x.Summing (a, b, c, d, e, f)
values
(select a, b, c, d, e, sum(f)
from
((select a, b, c, d, e, f from x.draft
where d = 1
and substr(A, -2, 2) in (select ODE from x.ram
where city = 'KT'))
union all
(select a, b, c, d, e, sum(f) from x.draft
where d != 1
and substr(A, -2, 2) in (select ODE from x.ram
where city = 'KT'))
)
group by a, b, c, d, e;
字符串
但我得到了这个错误:
SQL错误:ORA-00936:缺失表达式
00936. 00000 -“缺少表达式”
3条答案
按热度按时间4ngedf3f1#
您发布的查询无效;
values
应该被删除(因为你没有插入单独的值,而是select
语句的结果)。此外,查询本身无效。如果没有示例数据和虚拟列名,很难猜测您在做什么,但是第二个
union
查询还需要group by
子句,因为它对f
求和,所以所有其他非聚合列都必须放入group by
中。重写后,就语法而言,这个 * 应该 *(不能测试它)是可以的。
字符串
9gm1akwq2#
您错过了命令是INSERT INTO SELECT
所以你可以
字符串
z18hc3ub3#
这两个子查询之间的唯一区别是
d = 1
和d != 1
上的过滤器。您可以将这两个条件组合成d = 1 OR d != 1
,然后进一步组合成d IS NOT NULL
。一旦你这样做了,那么UNION
就不必要了:字符串
除此之外,
VALUES
关键字有一个语法错误(在使用INSERT INTO ... SELECT ...
时不需要)。