2017-04-09 70 views
1

我有一個名爲flightbooking的表。該表由字段組成,包括標有'R'或'C'的狀態,保留和取消。刪除具有特定狀態值的行(客戶)

Flightbooking Table

我試圖找出是允許刪除記錄,其中狀態是「C」,但如果以下行有「R」的狀態,應該不會被刪除。

[編輯]:我忘了補充說我需要從leadcustomer表中刪除一個客戶記錄。

因此總結如果CustomerID是2並且status ='C'客戶記錄可以被刪除。 否則,如果客戶ID是3並且狀態='R'客戶記錄不能被刪除。

此外,通過使用

DELETE FROM leadcustomer 
WHERE CustomerID = 2; 

(此客戶ID記錄具有狀態=「C」,所以我應該能夠將其刪除,但外鍵違反約束。)

+1

,用'從flightbooking那裏狀態=「C」刪除;' –

+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 ADD FOREIGN KEY(CustomerID)references leadcustomer(CustomerID); 這可以防止客戶被刪除。我需要能夠刪除狀態爲C但不應刪除R的客戶 – Wub