我有两个桌子。我想基于另一个名为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';
答案 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
来更新每一行