根據其他表條件刪除本表數據,標準 SQL 採用子查詢,部分產品支持 JOIN 刪除但不標準。
DELETE FROM Inventory
WHERE BreedID IN (
SELECT BreedID FROM Breed WHERE BreedName = 'Shitzu'
)
SELECT * FROM Inventory
WHERE BreedID IN (
SELECT BreedID FROM Breed WHERE BreedName = 'Shitzu'
)
確認結果集無誤後再執行 DELETE,防止誤刪。
-- SQL Server 支持語法(非 ANSI)
DELETE I
FROM Inventory I
JOIN Breed B ON I.BreedID = B.BreedID
WHERE B.BreedName = 'Shitzu'
-- Oracle/PostgreSQL/MySQL 語法各異,甚至不支持
實測多平台均有坑,**生產環境強烈建議僅用子查詢標準寫法**。
ON DELETE CASCADE(需謹慎評估業務語義)IsDeleted BIT,定期清理作業BEGIN TRAN ... COMMIT/ROLLBACKUPDATE STATISTICS + 重建碎片索引