由于有2个表:我可以使用1个SQL语句更新多个记录,其中更新值取决于正在更新的记录吗?
- 州(持有可用状态的列表) - 键字段= STATE_ID。另一个关键是DOMAIN_ID,STATE_NAME。因此,存在具有相同STATE_NAME但具有不同DOMAIN_ID的记录。
- OBJECTS(包含所有对象的列表,每个对象都有自己的状态) - 键字段= OBJECT_ID。还包含一个字段STATE_ID。
假设我有一个约1000个对象的列表,它们需要在各自的域中更新为状态“CLOSED”。
对于一个单独的对象(说OBJECT_ID 12345),我可以使用SQL语句:
update OBJECTS
set STATE_ID =
(
select STATE_ID from STATES
where STATE_NAME= 'CLOSED'
and DOMAIN_ID =
(
select DOMAIN_ID from STATES a, OBJECTS b
where a.STATE_ID = b.STATE_ID and b.OBJECT_ID = 12345)
)
) where OBJECT_ID = 12345
是否可以使用一个语句来更新不止一个对象吗?问题的症结似乎是我无法在SQL语句中的两个地方定义OBJECT_ID。
出于显而易见的原因,下面的语句是行不通的:
update OBJECTS
set STATE_ID =
(
select STATE_ID from STATES
where STATE_NAME= 'CLOSED'
and DOMAIN_ID =
(
select DOMAIN_ID from STATES a, OBJECTS b
where a.STATE_ID = b.STATE_ID and b.OBJECT_ID in
(
select distinct OBJECT_ID from OBJECTS_TO_UPDATE
)
)
) where OBJECT_ID in (select distinct OBJECT_ID from OBJECTS_TO_UPDATE)
任何人可以给我什么我可以做这一轮工作的提示?
谢谢。
由于一些RDBMS允许某些其他人不知道的语法,你在使用什么? (甲骨文,MySQL等?) – MatBailie 2011-05-18 13:45:32