SQL সার্ভারের সাথে INNER JOIN ব্যবহার করে মুছবেন কিভাবে?




sql-server sql-server-2008 (13)

আমি SQL Server 2008 এ INNER JOIN ব্যবহার করে মুছে ফেলতে চাই।

কিন্তু আমি এই ত্রুটি পেতে:

বার্তা 156, স্তর 15, রাজ্য 1, লাইন 15
শব্দ 'INNER' এর কাছাকাছি ভুল সিনট্যাক্স।

আমার কোড:

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

বর্তমানে আমি মুছে ফেলার বা এমনকি আপডেট করার জন্য ব্যবহার করছি:

DELETE FROM      w
FROM             WorkRecord2   w,
                 Employee      e
WHERE            w.EmployeeRun = e.EmployeeNo
             AND w.Company = '1' 
             AND w.Date = '2013-05-06'

এটা চেষ্টা কর:

DELETE FROM WorkRecord2 
       FROM Employee 
Where EmployeeRun=EmployeeNo
      And Company = '1' 
      AND Date = '2013-05-06'

 DELETE a FROM WorkRecord2 a 
       INNER JOIN Employee b 
       ON a.EmployeeRun = b.EmployeeNo 
       Where a.Company = '1' 
       AND a.Date = '2013-05-06'

এই প্রশ্নের চেষ্টা করুন:

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';

আপনি যদি একের অধিক টেবিলে সম্পর্কিত তথ্য মুছে ফেলতে চান তবে আপনি নীচের হিসাবে একটি কোয়েরি গঠন ব্যবহার করতে পারেন:

delete d.*,r.*,a.* from notifications_data d inner join notification_recipient_details r on d.notifications_data_id=r.notifications_data_id inner join notifications_audit a on d.notifications_data_id = a.notifications_data_id

উপরের প্রশ্নের পুরোপুরি কাজ করে এবং তিনটি টেবিল থেকে তথ্য মুছে ফেলা হয়


আপনি কোন টেবিলটি মুছে ফেলছেন তা নির্দিষ্ট করতে হবে, এখানে একটি উপনাম সহ একটি সংস্করণ রয়েছে:

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

এটি একটি সময় দুটি টেবিল থেকে রেকর্ড মুছে ফেলার একটি সহজ প্রশ্ন।

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

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 WorkRecord2
FROM WorkRecord2 
INNER JOIN Employee ON EmployeeRun=EmployeeNo
Where Company = '1' AND Date = '2013-05-06'

আপনি 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;

@ ডিভায়ারের উত্তরটি অসম্পূর্ণ হলেও স্ট্যান্ডার্ড এসকিউএল এর মতো আরো দেখতে হবে:

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

উপরে উল্লেখিত গুরুত্বপূর্ণ বিষয়টি হল স্পষ্ট যে মুছে ফেলাটি একটি একক টেবিলের লক্ষ্যবস্তু, যা দ্বিতীয় উদাহরণে একটি স্কলার সাবক্যুয়ারি দ্বারা প্রয়োগ করা হয়।

আমার জন্য বিভিন্ন মালিকানা সিনট্যাক্স উত্তর পড়া এবং বুঝতে কঠিন। আমি মনে করি @ ফ্রান্সস ইলিলারিং এর উত্তরে মনস্তাত্ত্বিকটি সেরাভাবে বর্ণনা করা হয়েছে, অর্থাত্ কোড লেখার ব্যক্তিটি অবশ্যই সেই ব্যক্তির যত্ন নেবেন না যিনি কোডটি পড়তে ও বজায় রাখতে পারবেন।


কেবলমাত্র DELETE এবং যেখান থেকে আপনি রেকর্ড মুছে ফেলতে চান সেখান FROM সারণির নাম যুক্ত করুন কারণ আমাদেরকে মুছে ফেলতে টেবিল নির্দিষ্ট করতে হবে। এছাড়াও রেকর্ডটি মুছে ফেলার সময় অর্ডার দেওয়ার মতো কিছু নেই তবে অর্ডারের মাধ্যমে অর্ডারটি সরান।

সুতরাং আপনার চূড়ান্ত প্রশ্নটি এইরকম হওয়া উচিত:

    DELETE WorkRecord2 
      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 নির্বাচন করুন পরিবর্তন করুন:

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




sql-delete