PostgreSQL根据存储​​在另一个表中的值更新表列

时间:2019-07-29 11:16:45

标签: postgresql

我有两个桌子。我想基于另一个名为emodnet_code的表的列2018_01并使用其他两个列的值的匹配来更新名为emodnet_type的表的shiptype_emodnet列值: aisshiptype表中的2018_01列和aisshiptype表中的shyptype_emodnet列。查询成功返回,但影响了0行:

UPDATE "2018_01"
SET emodnet_code = shiptype_emodnet.emodnet_type
FROM "shiptype_emodnet" 
WHERE '2018_01.aisshiptype' = 'shiptype_emodnet.aisshiptype';

2 个答案:

答案 0 :(得分:1)

您正在比较WHERE子句中的字符串常量,不是列。因此,您的where子句:

DateTime

始终为假,因为字符串文字Count()永远不会与字符串文字WHERE '2018_01.aisshiptype' = 'shiptype_emodnet.aisshiptype'; 相同。因此,您的where条件基本上与以下条件相同:

'2018_01.aisshiptype'

Identifiers必须用双引号('shiptype_emodnet.aisshiptype')引起来。对于string literals,单引号(where false

"

对于只使用在SQL中是非法名称或使用双引号和大小写混合的名称的列或表,只需使用双引号。

答案 1 :(得分:0)

您可以尝试:

UPDATE "2018_01" t
SET t.emodnet_code = (SELECT shiptype_emodnet.emodnet_type 
                    FROM shiptype_emodnet 
                    WHERE t.aisshiptype = shiptype_emodnet.aisshiptype
                    Limit 1);

您应该添加limit 1来更新每一行