Postgresql SQL 抛出不明确的列错误
Postgresql SQL throws ambiguous column error
我的 Postgres 数据库中有以下 table
CREATE TABLE "public"."zuffs"
(
"hash" bigint NOT NULL,
"zuff" BIGINT NOT NULL,
"lat" INTEGER NOT NULL,
"lng" INTEGER NOT NULL,
"weather" INTEGER DEFAULT 0,
"expires" INTEGER DEFAULT 0,
"clients" INTEGER DEFAULT 0,
CONSTRAINT "zuffs_hash" PRIMARY KEY ("hash")
) WITH (oids = false);
我想向其添加新行或更新 weather, expires & clients
列(如果该行已存在)。为此,我让 PHP 脚本生成以下 SQL
INSERT INTO zuffs (hash,zuff,lat,lng,weather,expires)
VALUES(5523216,14978310951341,4978,589,105906435,4380919) ON CONFLICT(hash) DO UPDATE SET
weather = 105906435,expires = 4380919,clients = clients + 1;
失败并出现错误
ERROR: column reference "clients" is ambiguous
我不明白为什么会这样。希望这里有人能解释一下
在 UPDATE 部分,您应该使用 EXCLUDED "row" 来引用值。要引用现有值,您需要再次在列前加上 table 以避免 "excluded" 和 "current" 值之间的歧义:
INSERT INTO zuffs (hash,zuff,lat,lng,weather,expires)
VALUES (5523216,14978310951341,4978,589,105906435,4380919)
ON CONFLICT(hash) DO UPDATE
SET weather = excluded.weather,
expires = excluded.expires,
clients = zuffs.clients + 1;
我的 Postgres 数据库中有以下 table
CREATE TABLE "public"."zuffs"
(
"hash" bigint NOT NULL,
"zuff" BIGINT NOT NULL,
"lat" INTEGER NOT NULL,
"lng" INTEGER NOT NULL,
"weather" INTEGER DEFAULT 0,
"expires" INTEGER DEFAULT 0,
"clients" INTEGER DEFAULT 0,
CONSTRAINT "zuffs_hash" PRIMARY KEY ("hash")
) WITH (oids = false);
我想向其添加新行或更新 weather, expires & clients
列(如果该行已存在)。为此,我让 PHP 脚本生成以下 SQL
INSERT INTO zuffs (hash,zuff,lat,lng,weather,expires)
VALUES(5523216,14978310951341,4978,589,105906435,4380919) ON CONFLICT(hash) DO UPDATE SET
weather = 105906435,expires = 4380919,clients = clients + 1;
失败并出现错误
ERROR: column reference "clients" is ambiguous
我不明白为什么会这样。希望这里有人能解释一下
在 UPDATE 部分,您应该使用 EXCLUDED "row" 来引用值。要引用现有值,您需要再次在列前加上 table 以避免 "excluded" 和 "current" 值之间的歧义:
INSERT INTO zuffs (hash,zuff,lat,lng,weather,expires)
VALUES (5523216,14978310951341,4978,589,105906435,4380919)
ON CONFLICT(hash) DO UPDATE
SET weather = excluded.weather,
expires = excluded.expires,
clients = zuffs.clients + 1;