Postgresql:多次插入相同的数据
Postgresql: insert the same data a few times
我有tablea
,在这个table一个SQL请求后,我有几次相同的记录。
这是我的要求。
for server_id in (select bs.id from status.servers bs
join settings.config blc on bs.id = blc.server_id
where blc.lane_number = (dataitem->>'No')::SMALLINT AND blc.min_length <= (dataitem->>'len')::real
)
LOOP
insert into a(measurement_id, server_id, status)
VALUES (
measurement_id,server_id,false
);
END LOOP;
结果我在 table a 中有这样的记录:
id meas_id serv_id status
1 12 1 f
2 12 1 f
3 12 1 f
我修改了一些代码,在工作代码中没有语法错误
正在回答
"why i have the same records with dif id?"
table 列 id
可能有一个默认值,因此值是从序列中获取的。很可能你用 serial
数据类型创建了它......那么这些结果是预期的。如果你想定义你的值,你不应该跳过标量列表中的列,所以
insert into a(measurement_id, server_id, status)
必须变成
insert into a(id, measurement_id, server_id, status)
并相应地传递值...
如果您期望一个结果(假设它来自 server_id 的相同值),您需要将 distinct
添加到
for server_id in (select distinct bs.id from status.servers bs
因为目前您的 select returns 三行具有相同的 bs.id
作为 join
的结果,在连接键上具有三个匹配行...
我有tablea
,在这个table一个SQL请求后,我有几次相同的记录。
这是我的要求。
for server_id in (select bs.id from status.servers bs
join settings.config blc on bs.id = blc.server_id
where blc.lane_number = (dataitem->>'No')::SMALLINT AND blc.min_length <= (dataitem->>'len')::real
)
LOOP
insert into a(measurement_id, server_id, status)
VALUES (
measurement_id,server_id,false
);
END LOOP;
结果我在 table a 中有这样的记录:
id meas_id serv_id status
1 12 1 f
2 12 1 f
3 12 1 f
我修改了一些代码,在工作代码中没有语法错误
正在回答
"why i have the same records with dif id?"
table 列 id
可能有一个默认值,因此值是从序列中获取的。很可能你用 serial
数据类型创建了它......那么这些结果是预期的。如果你想定义你的值,你不应该跳过标量列表中的列,所以
insert into a(measurement_id, server_id, status)
必须变成
insert into a(id, measurement_id, server_id, status)
并相应地传递值...
如果您期望一个结果(假设它来自 server_id 的相同值),您需要将 distinct
添加到
for server_id in (select distinct bs.id from status.servers bs
因为目前您的 select returns 三行具有相同的 bs.id
作为 join
的结果,在连接键上具有三个匹配行...