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

ここでループチェックを実行する方法は?

4

3 に答える 3

2

「ChildTableStatus」は実際には同じテーブルを参照していると想定しています。その場合、適切なフィルタリング式を探しているだけです。

update parents
    set status = 'deleted'
    where exists (select 1 from parents p2 where p2.cid = p.pid and p2.status = 'deleted')
于 2013-07-04T02:08:23.683 に答える
1

EXISTS や IN などのネストされたクエリを使用するとパフォーマンスが低下するため、次の DML の方が優れていると思います。

Update p1
Set p1.Status = 'Deleted'
FROM Parents p1 JOIN Parents p2
ON p1.pid = p2.cid
Where p2.status = 'Deleted'
  • これは、同じテーブルで更新を行おうとしていると仮定しています。それ以外の場合は、 FROM句でテーブル名を変更するだけです。
于 2013-07-04T07:31:25.977 に答える
0

これを試してみてください..

Update ChildTableStatus
Set Status = 'Deleted'
Where CID = (Select CID from Parents where Pstatus = 'deleted')
于 2013-07-04T03:35:59.717 に答える