我有一个SQL查询,看起来像这样:
INSERT INTO testing.names
(
id,
first_name,
active_status
)
-------------------------------------
SELECT
stage.id,
stage.first_name,
stage.active_status
FROM
testing.name stage
ON CONFLICT ON CONSTRAINT names_pkey DO UPDATE
SET
active_status = excluded.active_status
where
active_status <> excluded.active_status
问题:错误信息
active_status <> excluded.active_status is ambiguous.
有人有什么建议吗?出于某种原因,它说active_status
是不明确的,但只是在where子句的位置?我知道我可以用化名,但我不知道在这种情况下如何使用。
2条答案
按热度按时间guicsvcw1#
看起来我可以这样做:
iqih9akk2#
是的,在这一点上有两个关系在起作用,“名字”和“排除”。所以它是模糊的。如果你愿意,你可以用化名,但你不需要这样做。您可以直接使用表名(不使用模式)。
对于SET,只有目标关系中的列可以被更新,所以在这种情况下没有歧义。
你可能会争辩说,唯一的替代解释是
excluded.active_status <> excluded.active_status
,这是没有意义的,所以它不是真正的二义性。但试图采用这种推理就太聪明了。只是在资格赛中,然后就结束了。