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;
但是,我建议您不要将此信息保存在两个表中。相反,使用查询、视图或函数来提取信息。这将防止基本单位发生变化时出现问题