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

