我有一个项目表:
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
。
我该如何解决这个问题?
答案 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;
但是,我建议您不将此信息保存在两个表中。而是使用查询,视图或函数来提取信息。如果基本单位发生变化,这将防止出现问题。