您能帮我为PostgreSQL创建SQL请求以更新没有主键的表中的 first 记录吗?
UPDATE "company"
SET "salary" = 6
WHERE "name" = 'x' AND "age" = 5 AND "address" = 'x' AND "salary" = 5
LIMIT 1;
*请注意,表没有PK。这意味着可以完全相同的记录具有相同的值
答案 0 :(得分:0)
简短的回答:您不能。如果“ WHERE”子句不能将选择范围限制为一行,那么您实际上就无法做您想做的事。
行是否具有数据库本身可以跟上的固有行ID?如果是这样,您也许可以使用它。
答案 1 :(得分:0)
表中的每一行都有一个tid类型的系统列ctid,代表该行的物理位置:,因此您可以使用ctid进行更新
UPDATE company
SET salary = 6
WHERE ctid =(0,1)
答案 2 :(得分:0)
您可以使用ctid
来精确更新一行。 SQL表是无序的,因此没有“第一”行之类的东西,但是您可以将更新限制为一行:
UPDATE "company" c
SET "salary" = 6
WHERE "name" = 'x' AND "age" = 5 AND "address" = 'x' AND "salary" = 5 AND
ctid = (SELECT ctid
FROM "company" c2
WHERE c2."name" = c."name" and c2."age" = c."age" and c2."address" = c."address" and c2."salary" = c."salary"
ORDER BY ctid
LIMIT 1
);
也就是说,我认为您应该努力修复表,而不是尝试处理只会继续导致问题的数据。