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'
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'
削除するテーブルを指定する必要があります。エイリアス付きのバージョンは次のとおりです。
DELETE w
FROM WorkRecord2 w
INNER JOIN Employee e
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 zpost
FROM zpost
INNER JOIN zcomment ON (zpost.zpostid = zcomment.zpostid)
WHERE zcomment.icomment = "first"
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
DELETE a FROM WorkRecord2 a
INNER JOIN Employee b
ON a.EmployeeRun = b.EmployeeNo
Where a.Company = '1'
AND a.Date = '2013-05-06'
別の方法は次を使用してい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
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 による回答で最もよく説明されていると思います。つまり、コードを書いている人は、コードを読んで維持する人を必ずしも気にしません。
サブクエリを実行することもできます。以下のコードのように:
DELETE FROM users WHERE id IN(
SELECT user_id FROM Employee WHERE Company = '1' AND Date = '2013-05-06'
)