it-swarm.asia

كيفية حذف باستخدام INNER JOIN مع SQL Server؟

أريد الحذف باستخدام INNER JOIN في SQL Server 2008 .

لكنني حصلت على هذا الخطأ:

الرسالة 156 ، المستوى 15 ، الحالة 1 ، السطر 15
بناء جملة غير صحيح بالقرب من الكلمة الأساسية "INNER".

رمز بلدي:

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

تحتاج إلى تحديد الجدول الذي تحذف منه ، إليك إصدار به اسم مستعار:

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

ما عليك سوى إضافة اسم الجدول بين DELETE و FROM من المكان الذي تريد حذف السجلات فيه لأنه يتعين علينا تحديد الجدول المراد حذفه. قم أيضًا بإزالة جملة ORDER BY لأنه لا يوجد شيء للطلب أثناء حذف السجلات.

لذلك يجب أن يكون الاستعلام النهائي كما يلي:

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

جرب هذا:

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

ممكن يكون هذا مفيدًا لك -

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

يجب أن يكون:

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

هذا الإصدار يجب أن يعمل

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

جرب هذا الاستعلام:

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

في SQL Server Management Studio ، يمكنني بسهولة إنشاء استعلام 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
6
frans eilering
 DELETE a FROM WorkRecord2 a 
       INNER JOIN Employee b 
       ON a.EmployeeRun = b.EmployeeNo 
       Where a.Company = '1' 
       AND a.Date = '2013-05-06'
5
Dhanraj Mittal

جرب هذا ، قد يساعد

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

طريقة أخرى باستخدام 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 داخل CTE عندما تريد delete.

3
Pரதீப்

هذا استعلام بسيط لحذف السجلات من جدولين في وقت واحد.

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

لا تحدد الجداول 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 هو أيضًا SQL قياسي على الرغم من عدم اكتماله ، يجب أن يبدو أكثر من هذا القبيل:

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

الشيء المهم الذي يجب ملاحظته حول ما سبق هو أنه من الواضح أن الحذف يستهدف جدولًا واحدًا ، كما هو مطبق في المثال الثاني من خلال طلب استعلام فرعي قياسي.

بالنسبة لي إجابات بناء الجملة المختلفة يصعب قراءتها وفهمها. أعتقد أن أفضل طريقة يمكن وصفها هي أن التفكير في الإجابة من خلالfrans eilering ، أي أن الشخص الذي يكتب الرمز لا يهتم بالضرورة بالشخص الذي سيقرأ الكود ويحافظ عليه.

2
onedaywhen

هنا هو إصدار SQL Server الخاص بي

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)
1
ozzy432836

إليك ما أستخدمه حاليًا للحذف أو حتى التحديث:

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