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 2008INNER JOINで削除したい。
しかし、私はこのエラーを受け取ります:
メッセージ156、レベル15、状態1、行15
キーワード「INNER」付近の構文が正しくありません。
私のコード:
DELETE FROM WorkRecord2 
INNER JOIN Employee ON EmployeeRun=EmployeeNo
WHERE 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'削除するテーブルを指定する必要があるため、レコードを削除する場所の間DELETEにFROM、そこからテーブルの名前を追加するだけです。また、ORDER BYレコードの削除中に順序付けするものがないため、句も削除します。
したがって、最終的なクエリは次のようになります。
    DELETE WorkRecord2 
      FROM WorkRecord2 
INNER JOIN Employee 
        ON EmployeeRun=EmployeeNo
     WHERE Company = '1' 
       AND Date = '2013-05-06';DELETE Employeeテーブルの代わりにを使用すると、従業員のテーブルから削除されWorkRecord2ます。
                    これはあなたに役立つ可能性があります-
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 ....
)これを試して:
DELETE FROM WorkRecord2 
       FROM Employee 
Where EmployeeRun=EmployeeNo
      And 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.IDbedrijfSELECTステートメントで確認したすべてのレコードが削除されます。
同じ手順で、さらに難しい内部結合を作成することもできます。次に例を示します。
DELETE FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf
INNER JOIN LoginBedrijf ON Bedrijf.IDLoginBedrijf = LoginBedrijf.IDLoginBedrijfこのクエリを試してください:
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';ここに私の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)Companyとのテーブルを指定しませんDate場合は、修正することができます。
標準SQLを使用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' );上記について注意する重要な点は、削除が単一のテーブルをターゲットにしていることが明らかであることです。これは、2番目の例でスカラーサブクエリを要求することによって適用されます。
私にとって、さまざまな独自の構文の答えは読みにくく、理解しにくいものです。私の考え方は@frans eileringの回答で最もよく説明されていると思います。つまり、コードを書く人は、コードを読んで維持する人を必ずしも気にする必要はありません。
DELETE結合の使用方法を示しています