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 的结果,在连接键上具有三个匹配行...