2017-04-09 11 views
1

私はflightbookingという名前のテーブルを持っています。テーブルは、 'R'または 'C'のマークが付いたフィールド、予約済みおよびキャンセル済みのフィールドで構成されます。私が把握しようとしている何特定のステータス値を持つ行(得意先)を削除します

Flightbooking Table

ステータスが「C」であるが、以下の行が「R」のステータスを持っている場合、それは削除すべきではないレコードを削除できるようにすることです。

[編集]:私はleadcustomerテーブルから顧客レコードを削除する必要があることを追加するのを忘れました。

したがって、CustomerIDが2でstatus = 'C'の場合顧客レコードは削除できます。 それ以外の場合、CustomerIDが3でステータスが 'R'の場合顧客レコードは削除できません。

DELETE FROM leadcustomer 
WHERE CustomerID = 2; 

使って、さらに

、(この得意先レコードには、=「C」ので、私はそれを削除することができるはずですが、外部キー制約に違反する状況があります。)

+1

どこステータスは=「C」flightbookingから削除 '使用;' –

+0

私は私はあなたの必要性を理解しているかどうかわかりませんが、この次は、トリックを行う可能性がありますあなたのためのオプションかもしれません:https://www.postgresql.org/docs/current/static/ddl-rowsecurity.html – rsc

+0

私の悪い私は私の要件を明確に書いていない、うまくいけば、 。 – Wub

答えて

0

あなたが持っているしたい場合には行間の依存関係は、通常はウィンドウ関数を使用する必要があります。あなたが「C」を持つ行を削除したい場合は、

DELETE FROM flightbooking WHERE 
    flightbooking.id = (SELECT id FROM (
     SELECT id,status,lead(status) OVER (ORDER BY id) FROM flightbooking) a 
    WHERE a.status='C' AND a.lead <> 'R') ; 
+0

私の投稿を編集しました。うまくいけば、それは今より意味をなさない。私はleadcustomersテーブルに外部キーを持っていますALTER TABLE flightbooking外部キーを追加する(CustomerID)参照leadcustomer(CustomerID); これは、顧客が削除されるのを防ぎます。ステータスがCの顧客を削除できますが、Rは削除しないでください – Wub

関連する問題