এসকিউএল সার্ভারের সাথে অন্তর্ভুক্ত যোগদান করে কীভাবে মুছবেন?


1283

আমি ব্যবহার মুছে ফেলতে চান INNER JOINমধ্যে SQL সার্ভার 2008

তবে আমি এই ত্রুটিটি পেয়েছি:

এমএসজি 156, স্তর 15, রাজ্য 1, লাইন 15
'INNER' কীওয়ার্ডের নিকটে ভুল সিনট্যাক্স।

আমার কোড:

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


1
উদাহরণ সিতে একটি কার্সার এবং একগুচ্ছ বহির্মুখী জিনিস ব্যবহার করা হয়
রেগেইগুইটার ২

T1.id = t2.id তে টেবিল 1 টি 1 অন্তঃস্থ জোড় টেবিল 2 টি 2 থেকে টেবিল 1 থেকে মুছুন; বিশদগুলিতে youtu.be/_tyUVrS2iH4
অমরেশ কুমার সিংহ

উত্তর:


2241

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

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

9
@ ব্লুফাইট আপনি উভয় টেবিল থেকে মুছে ফেলার জন্য এসকিউএল সার্ভারের জন্য সঠিক বাক্য গঠন দিতে পারেন?
ওবারকা

44
@ user2070775 এসকিউএল সার্ভারে 2 টি টেবিল থেকে মুছতে আপনাকে 2 পৃথক বিবৃতি ব্যবহার করতে হবে।
তারিন

8
@ user2070775 SQL সার্ভার, আপনি লেনদেন এবং সিউডো-টেবিল, যেমন দেখানো ব্যবহার করতে পারেন stackoverflow.com/questions/783726/...
ম্যাথিউকে Rodic

1
@ ম্যাথিউরডিক ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমার সেটআপে আমি 2 টি টেবিলগুলি আলাদাভাবে মুছে ফেললে আমি সত্যিই জানি না যে 2 সারণী থেকে কোন সারিগুলি মুছতে হবে তাই এটি সাহায্য করবে :)
ভেরেনা হানস্মমিড

2
@ শাহরিয়ারসালজুফি এটিই ওয়ার্করেকর্ড 2 টেবিলের জন্য উপনাম।
তারিন

151

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

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

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

3
আপনি যদি কেবল প্রথম টেবিল থেকে মুছতে চান তবে এটি এসকিউএল সার্ভারে কাজ করে।
ট্রয়স্টেভেন

1
@ ম্যাটওয়াক: আপনি দ্বিতীয় টেবিল থেকে মুছে ফেলতে পারেন যদি আপনি দ্বিতীয় টেবিলের নাম ব্যবহার করেন। উদাহরণস্বরূপ ব্যবহারের DELETE Employeeফলে টেবিলের পরিবর্তে কর্মচারীদের টেবিল থেকে মুছে ফেলা হবে WorkRecord2
hims556

1
@ ম্যাটওয়ঙ্ক: এখানে একটি উদাহরণ রয়েছে: 1) প্রথম টেবিল থেকে মোছা 2) দ্বিতীয় সারণী থেকে মোছা
hims556

30

এটি আপনার পক্ষে সহায়ক হতে পারে -

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 ....
)

1
এটি সাকিল সার্ভারে কাজ করে এমন একমাত্র উত্তর। শুধু আপনার জিজ্ঞাসাটি আইডি থেকে নির্বাচন করুন ... যোগ দিন ... যোগ করুন ইত্যাদি উপস্থাপনা হিসাবে এটি আবদ্ধ করুন এবং (টেবিল) থেকে একটি মুছুন যেখানে আইড ইন (উপকণ্ঠ)
ক্রিস মোসচিনি



11

এই সংস্করণে কাজ করা উচিত

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

11

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে আমি সহজেই একটি SELECTকোয়েরি তৈরি করতে পারি ।

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

আমি এটি কার্যকর করতে পারি এবং আমার সমস্ত পরিচিতি প্রদর্শিত হয়।

এখন পরিবর্তন SELECTএকটি থেকে 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


9

এই কোয়েরিটি চেষ্টা করে দেখুন:

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

8
আমি নিশ্চিত যে একটি মোছা কেবল একটি টেবিল নির্দিষ্ট করতে পারে। এটি আমার পক্ষে কাজ করে না।
স্টিলথ রাব্বি

3
আমি বিশ্বাস করি আপনি মাইএসকিউএল মুছে ফেলার জন্য একাধিক টেবিল নির্দিষ্ট করতে পারেন, তবে এসকিউএল সার্ভার নয় (যা প্রশ্নটি জিজ্ঞাসা করে)।
dandev91

7

অন্য উপায় ব্যবহার 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 

দ্রষ্টব্য: আপনি যখন চান তখন আমরা JOINভিতরে ব্যবহার করতে পারি না ।CTEdelete


6

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

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

2
এই প্রশ্নটি এসকিউএল সার্ভারের জন্য। আপনি এসকিউএল সার্ভারের একটি বিবৃতিতে দুটি টেবিল থেকে মুছতে পারবেন না। আমার বোঝার এই হল পারেন MySQL এবং মাইক্রোসফট অ্যাক্সেস করা।
ড্যারেন গ্রিফিথ

6

এটি চেষ্টা করুন, এটি সাহায্য করতে পারে

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

7
এটি গৃহীত উত্তরের চেয়ে কীভাবে আলাদা: স্ট্যাকওভারফ্লো . com / জিজ্ঞাসা / ১8৪৮১1379//২ ?
ডিফল্ট লোকেল

3
এই উত্তরটি আলিয়াসিংয়ের পরিবর্তে সুস্পষ্ট টেবিলের নামকরণ ব্যবহার করে, যা কম চলছে তা পড়তে / ধরতে আরও কম অভিজ্ঞদের জন্য আরও জোরদার করে তোলে।
জোশুয়া বার্নস

1
@ জোশুয়া বার্নস: এখনও আমার উত্তরটির সঠিক সদৃশ ।
hims056

4

এখানে আমার এসকিউএল সার্ভার সংস্করণ

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)

4

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

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

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


4

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

DELETE           w
FROM             WorkRecord2   w,
                 Employee      e
WHERE            w.EmployeeRun = e.EmployeeNo
             AND w.Company = '1' 
             AND w.Date = '2013-05-06'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.