आप नियम समस्या के साथ जो देख रहे हैं वह यह है कि नियम प्रणाली डेटा को परमाणु रूप से संभालती नहीं है। DO INSTEAD नियम में दो कथनों के क्रम की परवाह किए बिना पहला डिलीट निष्पादित किया जाता है। दूसरा कथन कभी निष्पादित नहीं होता है, क्योंकि जिस पंक्ति को OLD.id संदर्भित करता है उसे दृश्य से हटा दिया गया है। आप लेफ्ट जॉइन का उपयोग कर सकते हैं, लेकिन उदाहरण तालिका डिज़ाइन के कारण यह आपकी मदद नहीं करेगा (यह आपके वास्तविक डेटाबेस स्कीमा पर काम कर सकता है)।
मूल समस्या, जैसा कि मैं देख रहा हूं, यह है कि आप नियम प्रणाली के साथ ऐसा व्यवहार कर रहे हैं जैसे वह एक ट्रिगर था।
आपका सबसे अच्छा विकल्प विदेशी कुंजियों और ON DELETE CASCADE
. का उपयोग करना है नियमों के बजाय। उनके साथ आपका उदाहरण स्कीमा भी काम करेगा:सभी बच्चों से छुटकारा पाने के लिए आपको केवल पैरेंट टेबल के लिए डिलीट की आवश्यकता होगी।