1569

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

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

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

私のコード:

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

16 に答える 16

2723

削除するテーブルを指定する必要があります。エイリアス付きのバージョンは次のとおりです。

DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
  ON EmployeeRun=EmployeeNo
WHERE Company = '1' AND Date = '2013-05-06'
于 2013-05-10T11:43:31.710 に答える
31

これを試して:

DELETE FROM WorkRecord2 
       FROM Employee 
Where EmployeeRun=EmployeeNo
      And Company = '1' 
      AND Date = '2013-05-06'
于 2013-05-10T17:37:22.040 に答える
18

そのはず:

DELETE zpost 
FROM zpost 
INNER JOIN zcomment ON (zpost.zpostid = zcomment.zpostid)
WHERE zcomment.icomment = "first"       
于 2014-08-17T08:15:09.047 に答える
17

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
于 2015-06-01T21:08:22.790 に答える
11
 DELETE a FROM WorkRecord2 a 
       INNER JOIN Employee b 
       ON a.EmployeeRun = b.EmployeeNo 
       Where a.Company = '1' 
       AND a.Date = '2013-05-06'
于 2015-04-28T16:00:54.753 に答える
8

別の方法は次を使用してい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

于 2016-09-10T14:59:45.057 に答える
5

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

上記について注意すべき重要な点は、削除が 1 つのテーブルを対象としていることが明らかであることです。これは、2 番目の例でスカラー サブクエリを要求することで強制されています。

私にとって、さまざまな独自の構文の回答は、読みにくく、理解しにくいものです。の考え方は、 frans eilering による回答で最もよく説明されていると思います。つまり、コードを書いている人は、コードを読んで維持する人を必ずしも気にしません。

于 2016-05-19T13:22:19.990 に答える
5

サブクエリを実行することもできます。以下のコードのように:

DELETE FROM users WHERE id IN(
    SELECT user_id FROM Employee WHERE Company = '1' AND Date = '2013-05-06'
)
于 2020-09-01T18:28:45.083 に答える