在同一个表

时间:2016-01-05 13:09:40

标签: sql postgresql

我有一个项目表:

itemid  quantity unitid  baseunitid
 880      5        10    null
 881      5         5    null

单位表:

unitid unittypeid 
 10       1
  5       1
  4       1

假设10是KM,5是米,4是厘米。

单位类型表:

unittypeid baseunitid
 1         4

这意味着unittypeid 1包含一个长度为单位的goup,我的系统中的基本单位为unitid=4,即cm

我想编写一个传递items的查询,并将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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以使用FROM子句执行此操作:

update items i
    set baseunitid = ut.baseunitid
    from units u join
         unittypes ut
         on ut.unittypeid = u.unittypeid
    where i.unitid = u.unitid;

但是,我建议您将此信息保存在两个表中。而是使用查询,视图或函数来提取信息。如果基本单位发生变化,这将防止出现问题。