postgresql根据存储在另一个表中的值更新表列
我有两张桌子。我想基于另一个名为postgresql根据存储在另一个表中的值更新表列,postgresql,Postgresql,我有两张桌子。我想基于另一个名为shiptype\u emodnet的表的emodnet\u-code列emodnet\u-code>更新名为2018\u-01的表的emodnet\u-code>列值,并使用其他两列值的匹配:columnaishipTypefrom2018\u-01表和列aishipType来自shyptype\u emodnet表格。查询已成功返回,但0行受影响: 更新“2018\u 01” 设置emodnet\u代码=shiptype\u emodnet.emodnet\u
shiptype\u emodnet
的表的emodnet\u-code
列emodnet\u-code>更新名为2018\u-01
的表的emodnet\u-code>列值,并使用其他两列值的匹配:columnaishipType
from2018\u-01
表和列aishipType
来自shyptype\u emodnet
表格。查询已成功返回,但0行受影响:
更新“2018\u 01”
设置emodnet\u代码=shiptype\u emodnet.emodnet\u类型
来自“shiptype_emodnet”
其中“2018_01.aishipType”=“shiptype_emodnet.aishipType”;
您可以试试:
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
您正在比较WHERE子句中的字符串常量,而不是列。所以你的where条款:
WHERE '2018_01.aisshiptype' = 'shiptype_emodnet.aisshiptype';
始终为false,因为字符串literal'2018\u 01.aishipType'
与字符串literal'shiptype\u emodnet.aishipType'
不同。因此,您的where条件基本上与:
where false
需要用双引号(“
)引用。单引号(”
)仅用于
对于使用SQL中非法的名称或使用双引号和大小写混合创建的名称的列或表,您只需要双引号。您的问题是什么?相应的选择返回什么?查询成功返回,但影响0行,这是不可能的。我的问题是:有一些代码中有错误?为什么不可能?如果SELECT
返回0行,则没有与WHERE
条件匹配的数据。请检查它。显然,这不是“不可能”,因为这显然发生在您身上;)@luighalco如果该答案解决了您的问题,请检查它,以便将您的问题标记为已解决。
UPDATE "2018_01"
SET emodnet_code = shiptype_emodnet.emodnet_type
FROM "shiptype_emodnet"
WHERE "2018_01".aisshiptype = shiptype_emodnet.aisshiptype;