私はテーブルperson
にuid
とemail
を持っています。私は親の関係を保存するテーブルparent_child
も持っています。それはとchild_uid
を持っています。どちらもperson
テーブルのuid
への必要な参照です。特定の1つの関係のみが存在する場合の行の削除
私はperson
を削除すると、私は限りすべての子を削除する:子は、電子メールが設定されていない
- 。私はこのフィールドを他の場所でどのように使用するかによって、このために@記号をチェックしています。
- 子供には他の親はいません。
今私はBEFORE DELETE ON person
トリガーからこれをやろうとしていますが、これを処理する最も効率的な方法ではないと感じています。
FOR child IN SELECT DISTINCT child_uid FROM parent_child WHERE parent_uid = OLD.uid
LOOP
IF NOT EXISTS (
-- Any parent that is not me.
SELECT 1
FROM parent_child
WHERE child_uid = child AND parent_uid <> OLD.uid
) THEN
DELETE FROM person WHERE uid = child AND email NOT LIKE '%@%'
END IF;
END LOOP;
単一の特定の関係によってはどういう意味ですか? – maSTAShuFu
通常、単一の 'DELETE'がループより効率的になります –
そして、あなたはどのように上記を単一の削除として書くでしょうか? – Gargoyle