2013-07-04 87 views
1

我想试图做的是更新我的子表时,我的父母状态为“已删除”更新父母表状态

父母表

------------- 
PID | CID |Pstatus 
1 | 1 | Deleted 
2 | 1 | Active 
3 | 2 | Deleted 
4 | 2 | Deleted 

背后的逻辑是类似下面

IF CID = 1 and PsTatus = deleted 

Update ChildTableStatus 
Set Status = 'Deleted' 
Where CID = 1 

Else 

cannot update childtablestatus to deleted due to there are active records 

如何在这里执行循环检查?

+1

请向我们展示ChildTableStatus的模式并解释表之间的关系。 – HABO

回答

2

我假设“ChildTableStatus”实际上是指同一张表。你只是在寻找合适的过滤表达式在这种情况下:

update parents 
    set status = 'deleted' 
    where exists (select 1 from parents p2 where p2.cid = p.pid and p2.status = 'deleted') 
0

试试这个..

Update ChildTableStatus 
Set Status = 'Deleted' 
Where CID = (Select CID from Parents where Pstatus = 'deleted') 
1

我认为以下DML应比使用嵌套查询,如存在于或更好因为它们会降低性能。

Update p1 
Set p1.Status = 'Deleted' 
FROM Parents p1 JOIN Parents p2 
ON p1.pid = p2.cid 
Where p2.status = 'Deleted' 
  • 这是假设你正在尝试做相同的表更新。否则,只需更改子句中的表名。