SQL सर्वर के साथ INNER जॉइन का उपयोग करके हटाएं कैसे?




sql-server sql-server-2008 (10)

मैं SQL Server 2008 में INNER JOIN का उपयोग करके हटाना चाहता हूं।

लेकिन मुझे यह त्रुटि मिलती है,

संदेश 156, स्तर 15, राज्य 1, रेखा 15
कीवर्ड 'INNER' के पास ncorrect वाक्यविन्यास।

मेरा कोड:

DELETE FROM WorkRecord2 
INNER JOIN Employee ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'

SQL सर्वर प्रबंधन स्टूडियो में मैं आसानी से एक चयन क्वेरी बना सकता हूं।

SELECT Contact.Naam_Contactpersoon, Bedrijf.BedrijfsNaam, Bedrijf.Adres, Bedrijf.Postcode
FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf

मैं इसे निष्पादित कर सकता हूं, और मेरे सभी संपर्क दिखाए जाते हैं।

अब चयन को एक हटाएं में बदलें:

DELETE Contact
FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf

SELECT कथन में आपके द्वारा देखे गए सभी रिकॉर्ड हटा दिए जाएंगे।

आप एक ही प्रक्रिया के साथ एक और कठिन आंतरिक भी शामिल हो सकते हैं, उदाहरण के लिए:

DELETE FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf
INNER JOIN LoginBedrijf ON Bedrijf.IDLoginBedrijf = LoginBedrijf.IDLoginBedrijf

आप Company और Date लिए टेबल निर्दिष्ट नहीं करते हैं, तो आप इसे ठीक करना चाहेंगे।

MERGE का उपयोग कर मानक एसक्यूएल:

MERGE WorkRecord2 T
   USING Employee S
      ON T.EmployeeRun = S.EmployeeNo
         AND Company = '1'
         AND Date = '2013-05-06'
WHEN MATCHED THEN DELETE;

@Devart का उत्तर भी मानक एसक्यूएल है हालांकि अधूरा, इस तरह दिखना चाहिए:

DELETE 
  FROM WorkRecord2
  WHERE EXISTS ( SELECT *
                   FROM Employee S
                  WHERE S.EmployeeNo = WorkRecord2.EmployeeRun
                        AND Company = '1'
                        AND Date = '2013-05-06' );

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

मेरे लिए विभिन्न स्वामित्व वाक्यविन्यास उत्तरों पढ़ने और समझने के लिए कठिन हैं। मुझे लगता है कि @frans eilering द्वारा उत्तर में दिमाग का सबसे अच्छा वर्णन किया गया है यानी कोड लिखने वाले व्यक्ति को उस व्यक्ति की परवाह नहीं है जो कोड को पढ़ और बनाए रखेगा।


इस क्वेरी को आज़माएं:

DELETE WorkRecord2, Employee 
FROM WorkRecord2 
INNER JOIN Employee ON (tbl_name.EmployeeRun=tbl_name.EmployeeNo)
WHERE tbl_name.Company = '1' 
AND tbl_name.Date = '2013-05-06';

इसे आज़माएं, इससे मदद मिल सकती है

 DELETE WorkRecord2 
          FROM WorkRecord2 
    INNER JOIN Employee 
            ON EmployeeRun=EmployeeNo
         WHERE Company = '1' 
           AND Date = '2013-05-06';

जहां आप रिकॉर्ड्स को हटाना चाहते हैं, वहां FROM DELETE और FROM बीच तालिका का नाम बस जोड़ें क्योंकि हमें हटाने के लिए तालिका निर्दिष्ट करनी है। खंड ORDER BY भी हटाएं क्योंकि रिकॉर्ड हटाने के दौरान आदेश देने के लिए कुछ भी नहीं है।

तो आपकी अंतिम क्वेरी इस तरह होनी चाहिए:

    DELETE WorkRecord2 
      FROM WorkRecord2 
INNER JOIN Employee 
        ON EmployeeRun=EmployeeNo
     WHERE Company = '1' 
       AND Date = '2013-05-06';

यह आपके लिए उपयोगी हो सकता है -

DELETE FROM dbo.WorkRecord2 
WHERE EmployeeRun IN (
    SELECT e.EmployeeNo
    FROM dbo.Employee e
    WHERE ...
)

या इसे आजमाएं -

DELETE FROM dbo.WorkRecord2 
WHERE EXISTS(
    SELECT 1
    FROM dbo.Employee e
    WHERE EmployeeRun = e.EmployeeNo
        AND ....
)

यह होना चाहिए:

DELETE zpost 
FROM zpost 
INNER JOIN zcomment ON (zpost.zpostid = zcomment.zpostid)
WHERE zcomment.icomment = "first"       

यहां मेरा SQL सर्वर संस्करण है

DECLARE @ProfileId table(Id bigint)

DELETE FROM AspNetUsers
OUTPUT deleted.ProfileId INTO @ProfileId
WHERE Email = @email

DELETE FROM UserProfiles    
WHERE Id = (Select Id FROM @ProfileId)

CTE का उपयोग कर एक और तरीका।

;WITH cte 
     AS (SELECT * 
         FROM   workrecord2 w 
         WHERE  EXISTS (SELECT 1 
                        FROM   employee e 
                        WHERE  employeerun = employeeno 
                               AND company = '1' 
                               AND date = '2013-05-06')) 
DELETE FROM cte 

नोट: जब आप delete चाहते हैं तो हम CTE अंदर JOIN उपयोग नहीं कर सकते हैं।


एक समय में दो टेबल से रिकॉर्ड हटाने के लिए यह एक साधारण क्वेरी है।

DELETE table1.* ,
       table2.* 
FROM table1 
INNER JOIN table2 ON table1.id= table2.id where table1.id ='given_id'




sql-delete