我有兩個表,一個父表和一個子表。孩子將有許多行parent_id。這兩個表都有狀態欄。可能的值是「活動」和「已刪除」。Oracle更新查詢 - 兩個表的連接
我想這樣做。如果對於父母標識,所有孩子都有刪除狀態,則必須將父母也標記爲從活動狀態中刪除。它可以在單個更新查詢中完成嗎?
在此先感謝。
我有兩個表,一個父表和一個子表。孩子將有許多行parent_id。這兩個表都有狀態欄。可能的值是「活動」和「已刪除」。Oracle更新查詢 - 兩個表的連接
我想這樣做。如果對於父母標識,所有孩子都有刪除狀態,則必須將父母也標記爲從活動狀態中刪除。它可以在單個更新查詢中完成嗎?
在此先感謝。
這樣的事情呢?
UPDATE parent_table pt SET deleted = 'Y' WHERE deleted = 'N' AND id NOT IN
(SELECT parent_id FROM child_table ct WHERE deleted = 'N' AND ct.parent_id = pt.id)
是:
update parent
set status = 'Deleted'
where status = 'Active'
and not exists (select null from child
where child.id = parent.id
and child.status <> 'Deleted')
UPDATE parent_table
set status = 'deleted'
WHERE status = 'active'
AND id in (
SELECT parent_id
FROM (
SELECT
parent_id
, count(*) total
, sum (CASE staus WHEN 'deleted' THEN 1 ELSE 0 END) deleted
FROM child_table
group by parent_id
)
WHERE total = deleted
)
記住,如果會議「A」已經插入,但沒有承諾一個新的「活動」記錄,會議「B」可能只看到「已刪除」記錄。您通常希望在高度併發的環境中避免這種做法。 – 2011-05-30 22:45:43