删除具有特定状态值的行(客户)

问题描述:

我有一个名为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

如果你想有行间依赖关系,您必须通常使用窗口函数。以下可能做的伎俩:如果你想删除有“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