sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur skriver man en raderingsregel på en vy?

Vad du ser med regelproblemet är att regelsystemet inte hanterar data atomärt. Den första borttagningen utförs oavsett ordningen på de två satserna i DO INSTEAD-regeln. Den andra satsen körs aldrig, eftersom raden som OLD.id refererar till har tagits bort från vyn. Du kan använda en LEFT JOIN, men det hjälper dig inte på grund av exempeltabelldesignen (det kan fungera på ditt faktiska databasschema).

Det grundläggande problemet, som jag ser det, är att du behandlar regelsystemet som det var en utlösande faktor.

Det bästa alternativet är att använda främmande nycklar och ON DELETE CASCADE istället för regler. Med dem skulle ditt exempelschema också fungera:Du behöver bara ta bort för att den överordnade tabellen ska bli av med alla barn.



  1. I Oracle, när det gäller syntax - hur konverterar jag (+)-syntaxen till modern konventionell JOIN?

  2. beräkna total inloggning-utloggningstid för en viss användare i mysql

  3. Hur man krypterar en lagrad procedur i SQL Server

  4. Hur man gör en inre join på radnummer i sql-server