gpt4 book ai didi

sql - Postgresql更新左连接

转载 作者:行者123 更新时间:2023-11-29 12:51:54 28 4
gpt4 key购买 nike

因此,我有以下代码可以根据 ID 和语言代码更新语言字符串表。如果我使用相同的 from 表达式执行 SELECT,它只会选择一行。如果我进行更新,它会更新所有行。我哪里出错了?

UPDATE shopmaster.catalog_lang SET shortname='TEST' 
FROM shopmaster.catalog_lang cl LEFT JOIN shopmaster.lang l ON cl.langid=l.langid
WHERE cl.catalogid=7 AND l.code='fr';

下面是两个表的定义:

CREATE TABLE IF NOT EXISTS shopmaster.lang(
langid SERIAL,
name TEXT,
code TEXT,
active BOOLEAN,
donotdelete BOOLEAN,
PRIMARY KEY (langid)


CREATE TABLE IF NOT EXISTS shopmaster.catalog_lang(
catalogid INT references shopmaster.catalog(catalogid),
langid INT references shopmaster.lang(langid),
title TEXT,
shortname TEXT,
dirname TEXT,
PRIMARY KEY (catalogid, langid)
);

最佳答案

不要在 FROM 中重复正在更新的表。所以:

UPDATE shopmaster.catalog_lang cl
SET shortname = 'TEST'
FROM shopmaster.lang l
WHERE cl.langid = l.langid AND cl.catalogid = 7 AND l.code = 'fr';

在 Postgres 中,对表的每个引用都是独立的。您的更新等同于此 SELECT:

SELECT . . .
FROM shopmaster.catalog_lang CROSS JOIN
shopmaster.catalog_lang cl LEFT JOIN
shopmaster.lang l
ON cl.langid = l.langid
WHERE cl.catalogid = 7 AND l.code = 'fr';

这绝对不是您想要的。

关于sql - Postgresql更新左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52002846/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com