2016-05-05 5 views
6

का उपयोग कर 2 टेबल से हटाएं मेरे पास 3 टेबल हैं।INNER JOIN

  • InvoiceOriginal
  • चालान
  • InvoiceHistory

चालान तालिका एक विदेशी कुंजी बाधा है। चालान तालिका में प्रत्येक प्रविष्टि इनवोइसोरिजिनल में एक समान प्रविष्टि है।

चालान मूल तालिका तालिका चालान के मूल मूल्यों को संग्रहीत करती है और इनवॉइस तालिका उपयोगकर्ता द्वारा संशोधित मानों को संग्रहीत करती है। यह सबमिशन के समय भिन्न होने के लिए किया जाता है।

एसक्यूएल मैं उपयोग कर रहा हूँ

DELETE i 
FROM invoice i 
INNER JOIN InvoiceHistory aih 
    ON i.ClientId = aih.HistoryClientNumber 
    AND i.invoiceNumber = HistoryInvoiceNumber 

हालांकि विलोपन विदेशी कुंजी बाधा की वजह से संभव नहीं है।

Invoice   InvoiceOriginal   InvoiceHistory 
Id    FK_InvoiceId   ClientId 
ClientId   ClientId    InvoiceNumber 
InvoiceNumber 

मैं चालान में प्रविष्टि को हटाने की जरूरत है और InvoiceOriginal एक बार वहाँ एक ही clientid के लिए InvoiceHistory में उस चालान संख्या के लिए एक प्रवेश है:

टेबल के नीचे के रूप में है।

+0

करने के लिए अपने विदेशी कुंजी बाधा को संशोधित करता है, तो उपयोग पर तालिका स्कीमा में DELETE CASCADE किसी एक क्वेरी में हटाने की आवश्यकता है। http://stackoverflow.com/questions/6260688/how-do-i-use-cascade-delete-with-sql-server –

उत्तर

7

आप एक समय में एक से अधिक तालिका के लिए एक हटाने बयान जारी नहीं कर सकते, आप माता-पिता रिकॉर्ड (रों)

4

को हटाने से पहले संबंधित तालिकाओं से प्रत्येक के लिए अलग-अलग हटाने बयान की जरूरत है मैं काफी यकीन है कि आप एक ही कथन के साथ कई तालिकाओं से हटा नहीं सकता है। मैं सामान्य रूप से एक पंक्ति के साथ बाल पंक्तियों को हटा देता हूं और फिर अभिभावक रिकॉर्ड हटा देता हूं। यदि आप विफलता पर वापस रोल करने की आवश्यकता हो सकती है तो आप इसे लेनदेन के अंदर करना चाहेंगे।

वैकल्पिक रूप से, आप विदेशी कुंजी पर कैस्केड ऑन डिलीट को सक्षम कर सकते हैं जो स्वचालित रूप से बच्चे के रिकॉर्ड के माध्यम से हटाने को कैस्केड कर देगा यदि यह कुछ ऐसा है जो इस प्रणाली के लिए उपयुक्त है।

+0

देखें, क्या आप कृपया CASCADE को DELETE – SJMan

+0

पर सिंटैक्स प्रदान कर सकते हैं, आप इसे विदेशी कुंजी https पर सेट करते हैं : //msdn.microsoft.com/en-GB/library/ms188066.aspx – wizzardmr42

2

आप एक ही क्वेरी से एकाधिक तालिका से रिकॉर्ड्स को हटा नहीं सकते हैं। लेकिन आप को हल करने के लिए इस

  1. बच्चे या मानचित्रण मेज से सभी संबंधित अभिलेख, हटाएँ दो विधियों और फिर माता-पिता/हैडर तालिका अभिलेख को नष्ट। (यहां एक से अधिक प्रश्नों की आवश्यकता है। बेहतर नियंत्रण के लिए SQL Transaction का उपयोग करें)।

  2. या, ON DELETE CASCADE

संबंधित मुद्दे