首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 跨表 DELETE 刪除多表記錄完整指南

     編輯:MySQL 資料庫相關知識

MySQL 跨表刪除概述

繼上一篇介紹 MySQL 跨表更新後,今天我們來深入探討跨表刪除。自 MySQL 4.0 版本起,MySQL 開始支援跨表 DELETE 語法,允許在單條 SQL 語句中同時刪除多個表的記錄,或根據多表關聯關係刪除特定表中的記錄。

準備工作:範例表結構

假設我們有兩張表:product(產品基本信息)和 productPrice(產品價格),兩表通過 productId 關聯。

方式一:使用逗號分隔多表(隱式連接)

最直觀的方式是在 FROM 子句中用逗號分隔多個表:

DELETE p.*, pp.*
FROM product p, productPrice pp
WHERE p.productId = pp.productId
  AND p.created < '2004-01-01';

此語句會同時刪除兩張表中符合條件的記錄。

方式二:使用 INNER JOIN 明確指定關聯

更規範的寫法是使用 INNER JOIN:

DELETE p.*, pp.*
FROM product p
INNER JOIN productPrice pp
  ON p.productId = pp.productId
WHERE p.created < '2004-01-01';

語義更清晰,便於維護,推薦在生產環境使用。

關鍵提示:可指定僅刪除特定表的數據

跨表刪除不一定要刪除所有關聯表的數據。若只想刪除 product 表記錄而保留 productPrice,只需調整 DELETE 子句:

DELETE p.*
FROM product p
INNER JOIN productPrice pp
  ON p.productId = pp.productId
WHERE p.created < '2004-01-01';

方式三:使用 LEFT JOIN 刪除無關聯記錄

若需刪除 productPrice 中不存在價格記錄的產品,可用 LEFT JOIN:

DELETE p.*
FROM product p
LEFT JOIN productPrice pp
  ON p.productId = pp.productId
WHERE pp.productId IS NULL;

此語句會找出價格表中無對應記錄的產品並刪除。

總結

MySQL 跨表 DELETE 功能強大且靈活,支援隱式連接、INNER JOIN、LEFT JOIN 等多種寫法,能滿足多種業務場景。建議優先使用顯式 JOIN 語法,代碼可讀性更高。歡迎閱讀配套文章《MySQL 跨表更新 多表 UPDATE SQL 語句總結》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved