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