如何解决避免在SQL插入中重复预定义值
我希望插入与一对ID相关联的两个值,而不在查询中对这些ID进行硬编码。
更具体地说,我有此表foo
:
create table if not exists foo(id int,val text);
我可以通过以下方式插入我的值:
insert into foo
values
(10,'qwe_1'),(10,'qwe_2'),'qwe_3'),(20,'asd_3'),'asd_4');
但是我不想重复那些10
和20
。
不久前,我问了类似的问题(SQL - Using WITH to declare variable on INSERT INTO),但它不能解决我的问题。 我也无法理解如何使用INSERT repeating values in SQL中建议的联接或类似方法,因为我想为每个id添加的值列表是任意的。
虽然不是严格需要,但我想使用with
语句首先声明我的ID:
with c (first_id,second_id) as (values (10,20))
select * from c;
但我不知道如何将其与insert into
语句结合使用。我有这个无法正常工作的查询,但它说明了我要实现的目标:
with c (first_id,20))
insert into foo
values
(c.first_id,(c.first_id,(c.second_id,'asd_4')
from c;
我的理解是values (...),...
语句返回一个表,所以也许我缺少的是将该表与c
表组合的一种方式。
解决方法
您可以使用横向连接:
insert into foo (id,val)
select v.id,v.val
from (values (10,20)) c(first_id,second_id) cross join lateral
(values (c.first_id,'qwe_1'),(c.first_id,'qwe_2'),'qwe_3'),(c.second_id,'asd_3'),'asd_4')
) v(id,val);
,
如果您能够使用块结构,则可以使用该路由。
do $$
DEFINE
v_first_id NUMBER := 10;
v_second_id NUMBER := 20;
BEGIN
... Your Insert Statement ...
END; $$
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。