it-swarm.asia

Bagaimana cara menghapus menggunakan INNER JOIN dengan SQL Server?

Saya ingin menghapus menggunakan INNER JOIN di SQL Server 2008 .

Tapi saya mendapatkan kesalahan ini:

Msg 156, Level 15, Negara Bagian 1, Jalur 15
Sintaksis salah di dekat kata kunci 'INNER'.

Kode saya:

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

Anda perlu menentukan tabel apa yang Anda hapus, berikut adalah versi dengan alias:

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

Cukup tambahkan nama tabel antara DELETE dan FROM dari tempat Anda ingin menghapus catatan karena kami harus menentukan tabel yang akan dihapus. Hapus juga klausa ORDER BY karena tidak ada yang dipesan saat menghapus catatan.

Jadi permintaan akhir Anda harus seperti ini:

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

Coba ini:

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

Mungkin ini bisa membantu Anda -

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

Atau coba ini -

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

Harus:

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

Versi ini seharusnya berfungsi

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

Coba kueri ini:

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

Di SQL Server Management Studio saya dapat dengan mudah membuat kueri SELECT.

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

Saya dapat menjalankannya, dan semua kontak saya ditampilkan.

Sekarang ubah SELECT menjadi DELETE:

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

Semua catatan yang Anda lihat dalam pernyataan SELECT akan dihapus.

Anda bahkan dapat membuat gabungan batin yang lebih sulit dengan prosedur yang sama, misalnya:

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

Coba ini, ini mungkin bisa membantu

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

Cara lain menggunakan 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 

Catatan: Kami tidak dapat menggunakan JOIN di dalam CTE saat Anda ingin delete.

3
Pரதீப்

Ini adalah permintaan sederhana untuk menghapus catatan dari dua tabel sekaligus.

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

Anda tidak menentukan tabel untuk Company dan Date, Anda mungkin ingin memperbaikinya.

SQL standar menggunakan MERGE:

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

Jawaban dari @Devart juga merupakan SQL Standar meskipun tidak lengkap, akan terlihat lebih seperti ini:

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

Hal penting yang perlu diperhatikan tentang hal di atas adalah jelas bahwa penghapusan menargetkan satu tabel, seperti yang diberlakukan pada contoh kedua dengan memerlukan subquery skalar.

Bagi saya berbagai jawaban sintaksis kepemilikan lebih sulit untuk dibaca dan dipahami. Saya kira pola pikir untuk yang terbaik dijelaskan dalam jawaban oleh @frans eilering yaitu orang yang menulis kode tidak selalu peduli dengan orang yang akan membaca dan memelihara kode.

2
onedaywhen

Ini adalah versi SQL Server saya

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

Inilah yang saat ini saya gunakan untuk menghapus atau bahkan memperbarui:

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