我有一个表a
,在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;
结果我在表a中有记录,如:
id meas_id serv_id status
1 12 1 f
2 12 1 f
3 12 1 f
我已经改变了一些代码,在工作代码中没有语法错误
答案 0 :(得分:0)
回答
“为什么我有与dif id相同的记录?”
表a可能具有列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会返回三行,其bs.id
与join
相同,并且在连接键上有三个匹配的行...