sql - 条件 - 複数テーブル 一括削除




SQL ServerでINNER JOINを使用して削除する方法 (10)

SQL Server 2008INNER JOINを使用して削除したいです。

しかし、私はこのエラーが発生します:

メッセージ156、レベル15、状態1、行15
キーワード 'INNER'の近くに構文が正しくありません。

私のコード:

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

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

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を使用することはできません。


これは、一度に2つのテーブルからレコードを削除する簡単なクエリです。

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

ここに私の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)

これを試してみてください

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

これを試して:

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

削除するテーブルを指定する必要があります。ここにはエイリアスのあるバージョンがあります:

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

削除するテーブルを指定する必要があるため、レコードを削除する場所からDELETEFROM間にテーブルの名前を追加するだけです。 ORDER BY句も削除します。これは、レコードの削除中には何も並べ替えられないためです。

したがって、最終的なクエリは次のようになります。

    DELETE WorkRecord2 
      FROM WorkRecord2 
INNER JOIN Employee 
        ON EmployeeRun=EmployeeNo
     WHERE Company = '1' 
       AND 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 FROM      w
FROM             WorkRecord2   w,
                 Employee      e
WHERE            w.EmployeeRun = e.EmployeeNo
             AND w.Company = '1' 
             AND w.Date = '2013-05-06'






sql-delete