Sql 在同一个表上运行带有Where条件的更新语句

Sql 在同一个表上运行带有Where条件的更新语句,sql,postgresql,Sql,Postgresql,我有一个项目表: itemid quantity unitid baseunitid 880 5 10 null 881 5 5 null 单位表: unitid unittypeid 10 1 5 1 4 1 假设10是公里,5是米,4是厘米 单位类型表: unittypeid baseunitid 1 4 这意味着unittypeid 1包含一组长度单

我有一个项目表:

itemid  quantity unitid  baseunitid
 880      5        10    null
 881      5         5    null
单位表:

unitid unittypeid 
 10       1
  5       1
  4       1
假设10是公里,5是米,4是厘米

单位类型表:

unittypeid baseunitid
 1         4
这意味着unittypeid 1包含一组长度单位,它们在我的系统中的基本单位是
unitid=4
,即
cm

我想编写一个查询,它传递
,并将
basunit
列更新为基本单位,如
baseunitid
中所示

意思是我想得到:

itemid  quantity unitid  baseunit
 10      5        10     4
 11      5         5     4
我写了这个查询:

update items a set baseunitid = (select baseunitid
                                     from unittypes
                                     where unittypeid=(select unittypeid
                                                      from units
                                                      where unitid=a.unitid)
但是,这不起作用,因为我无法在子查询中引用
a.unitid


如何解决此问题?

您可以使用
FROM
子句:

update items i
    set baseunitid = ut.baseunitid
    from units u join
         unittypes ut
         on ut.unittypeid = u.unittypeid
    where i.unitid = u.unitid;
但是,我建议您不要将此信息保存在两个表中。相反,使用查询、视图或函数来提取信息。这将防止基本单位发生变化时出现问题