首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

跟我學 SQL(七):依據子表條件刪除主表資料的進階技巧

     編輯:關於SqlServer

情境:依據關聯表條件刪除資料

常見需求:根據另一張表的條件,刪除本表中符合條件的列。這需要善用符合 SQL-92 標準的子查詢。雖然標準統一,但各資料庫廠商語法細節不同,部署前務必於測試環境驗證。

寵物店範例:刪除特定品種庫存

假設 breed 表存放品種資訊,inventory 表存放具體動物庫存。欲刪除所有「Shitzu」品種的庫存:

DELETE FROM inventory
WHERE breed_id IN (
    SELECT breed_id FROM breed WHERE breed_name = 'Shitzu'
);

子查詢先取得目標 breed_id,外層 DELETE 再依此刪除。執行前建議先用 SELECT * 驗證將被刪除的列:

SELECT * FROM inventory
WHERE breed_id IN (
    SELECT breed_id FROM breed WHERE breed_name = 'Shitzu'
);

DELETE 搭配 JOIN 的可行性

雖然 SQL Server 文件宣稱支援 DELETE ... JOIN,但實測多平台均不支援,且不符 SQL-92 標準,不建議使用。

一次刪除多張子表資料的限制

SQL-92 無標準語法支援單一 DELETE 針對多張表。DELETE 不接受多表參數,這也是為了避免破壞性操作的歧義。替代方案包括:

  • 新增 is_active 標記欄位,軟刪除取代硬刪除。
  • 撰寫預存程序,迭代執行多個 DELETE 陳述式。

最佳實務提醒

  • 熟悉資料庫結構後再執行刪除操作。
  • 永遠先用 SELECT 驗證影響範圍。
  • 生產環境執行前,務必在測試庫完整演練。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved