mysql支持跨表delete刪除多表記錄
更新時間:2012年12月16日 15:20:56 作者:
Mysql可以在一個sql語句中同時刪除多表記錄,也可以根據(jù)多個表之間的關(guān)系來刪除某一個表中的記錄
前幾天寫了Mysql跨表更新的一篇總結(jié),今天我們看下跨表刪除。
在Mysql4.0之后,mysql開始支持跨表delete。
Mysql可以在一個sql語句中同時刪除多表記錄,也可以根據(jù)多個表之間的關(guān)系來刪除某一個表中的記錄。
假定我們有兩張表:Product表和ProductPrice表。前者存在Product的基本信息,后者存在Product的價格。
第一種跨表刪除的方式是不用join,在delete時指定用半角逗號分隔多個表來刪除,如下sql語句:
DELETE p.*, pp.*
FROM product p, productPrice pp
WHERE p.productId = pp.productId
AND p.created < '2004-01-01'
第二種跨表刪除的方式是使用inner join在join中指定兩表之間的關(guān)聯(lián)關(guān)系,如下sql語句:
DELETE p.*, pp.*
FROM product p
INNER JOIN productPrice pp
ON p.productId = pp.productId
WHERE p.created < '2004-01-01'
注意:跨表刪除不必刪除所有表的數(shù)據(jù),上面的sql語句表會同時刪除Product和ProductPrice兩張表中的數(shù)據(jù),但是你可以指定 DELETE product.*從而只刪除product表中的記錄,而不處理ProductPrice表中的記錄。
跨表刪除也可以使用left join,例如我們要刪除所有在ProductPrice表中沒有記錄的Product表記錄。如下sql語句:
DELETE p.*
FROM product p
LEFT JOIN productPrice pp
ON p.productId = pp.productId
WHERE pp.productId is null
跨表刪除很有用,在需要的時候就用它吧。歡迎閱讀另外一篇關(guān)于跨表更新的介紹文章
在Mysql4.0之后,mysql開始支持跨表delete。
Mysql可以在一個sql語句中同時刪除多表記錄,也可以根據(jù)多個表之間的關(guān)系來刪除某一個表中的記錄。
假定我們有兩張表:Product表和ProductPrice表。前者存在Product的基本信息,后者存在Product的價格。
第一種跨表刪除的方式是不用join,在delete時指定用半角逗號分隔多個表來刪除,如下sql語句:
復(fù)制代碼 代碼如下:
DELETE p.*, pp.*
FROM product p, productPrice pp
WHERE p.productId = pp.productId
AND p.created < '2004-01-01'
第二種跨表刪除的方式是使用inner join在join中指定兩表之間的關(guān)聯(lián)關(guān)系,如下sql語句:
復(fù)制代碼 代碼如下:
DELETE p.*, pp.*
FROM product p
INNER JOIN productPrice pp
ON p.productId = pp.productId
WHERE p.created < '2004-01-01'
注意:跨表刪除不必刪除所有表的數(shù)據(jù),上面的sql語句表會同時刪除Product和ProductPrice兩張表中的數(shù)據(jù),但是你可以指定 DELETE product.*從而只刪除product表中的記錄,而不處理ProductPrice表中的記錄。
跨表刪除也可以使用left join,例如我們要刪除所有在ProductPrice表中沒有記錄的Product表記錄。如下sql語句:
復(fù)制代碼 代碼如下:
DELETE p.*
FROM product p
LEFT JOIN productPrice pp
ON p.productId = pp.productId
WHERE pp.productId is null
跨表刪除很有用,在需要的時候就用它吧。歡迎閱讀另外一篇關(guān)于跨表更新的介紹文章
相關(guān)文章
MYSQL 隨機(jī) 抽取實(shí)現(xiàn)方法及效率分析
MYSQL的隨機(jī)抽取實(shí)現(xiàn)方法。舉個例子,要從tablename表中隨機(jī)提取一條記錄,大家一般的寫法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。2009-05-05關(guān)于mysql中string和number的轉(zhuǎn)換問題
這篇文章主要介紹了關(guān)于mysql中string和number的轉(zhuǎn)換問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法分析
這篇文章主要介紹了mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法,結(jié)合實(shí)例形式分析了mysql存儲過程循環(huán)語句WHILE,REPEAT和LOOP的原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-12-12mysql 5.7安裝 MySQL 服務(wù)無法啟動但是服務(wù)沒有報(bào)告任何錯誤
這篇文章主要介紹了mysql 5.7安裝 MySQL 服務(wù)無法啟動但是服務(wù)沒有報(bào)告任何錯誤的相關(guān)資料,需要的朋友可以參考下2017-04-04