結合クエリで満たされた条件に基づいてレコードを削除することは可能ですか?
たとえば、3つのレコードを結合するリンクテーブルがあります。私が現在持っているクエリは、IDの1つがIN()
ではないPhp配列ではないこのテーブルからレコードを削除します。このIDが配列に存在せず、別のテーブルへのリンクに基づいて特定の他のテーブルに属している場合にのみ、クエリがこのテーブルからレコードを削除する必要があることに気付きました。
これにはEXISTS句を使用します。
DELETE FROM TableA
WHERE
<<put your array condition here>>
AND NOT EXISTS
(SELECT 1 FROM TableB Where TableB.ID=TableA.ID)
SQL Serverの場合、コマンドは少し異なります。
DELETE FROM TableA
FROM TableA LEFT OUTER JOIN TableB ON TableA.Column = TableB.Column
WHERE TableB.Column IS NULL
いいえ、それはタイプミスではありません、はい、あなたはdo "FROM TableA" twiceが必要です。少なくとも、2番目のFROMが必要です(最初のFROMはオプションです)。以下は、SQL ServerとMySQLの両方で機能するという利点があります。
DELETE TableA
FROM TableA LEFT OUTER JOIN TableB ON TableA.Column = TableB.Column
WHERE TableB.Column IS NULL
使用できます:
結合に基づく削除:
DELETE A
FROM TableA AS A
LEFT OUTER JOIN TableB As B ON A.Id = B.TabaleAId
WHERE B.Column IS NULL
サブクエリで削除:
DELETE
FROM TableA AS A
Where
A.id not in ( Select B.TabaleAId From Tab;eB As B )
または
DELETE FROM TableA
WHERE Not EXISTS
(
SELECT *
FROM TableB As B
Where B.TableAId = TableA.Id
)
テーブル式を使用した削除:
With A
As
(
Select TableA.*
FROM TableA AS A
LEFT OUTER JOIN TableB As B ON A.Id = B.TabaleAId
WHERE B.Column IS NULL
)
Delete From A
DELETE FROM TableA
LEFT OUTER JOIN TableB
WHERE TableB.Column IS NULL
TableBに対応するレコードがないtableAのレコードを削除します。それはあなたが求めているもののようなものですか?
DELETE FROM a
FROM TableA AS a LEFT OUTER JOIN TableB AS b
on a.CALENDAR_DATE = b.CALENDAR_DATE AND a.ID = b.ID
Where b.ID is null
最初にselectステートメントを使用して、削除するレコードを確認し、次にselectステートメントを削除して、上記のクエリ構文でDelete FROM tablenameを追加します。
結合に基づいて削除する最も簡単な方法は次のとおりです。
1. SELECT
ステートメントの代わりにDELETE
ステートメントを使用してクエリを記述します
SELECT COLUMNS
FROM Table1
INNER JOIN Table2 ON Table1.YYY = Table2.XXX
2. SELECT
COLUMNSをDELETE FROM TABLE
に置き換えます
DELETE FROM Table1
FROM Table1
INNER JOIN Table2 ON Table1.YYY = Table2.XXX
FROM
を2回指定する必要があることに注意してください。1つはDELETE
部分用で、もう1つはJOIN
部分用です。
delete from TableA
where id in
(
select id from TableA
except select id from TableB
)
これは、「テーブルAにIDがあり、テーブルBにないIDをテーブルAから削除する」という意味です。
そうでない場合、Mergeステートメントが役立つ場合があります(一致する/一致しない場合など) http://technet.Microsoft.com/en-us/library/bb510625.aspx