如何刪除數(shù)據(jù)庫(kù)中重復(fù)字段且特定列為空的行?

如何刪除數(shù)據(jù)庫(kù)中重復(fù)字段且特定列為空的行?

如何刪除數(shù)據(jù)庫(kù)重復(fù)字段且特定列為空的行

在關(guān)系型數(shù)據(jù)庫(kù)中,當(dāng)需要?jiǎng)h除具有特定字段重復(fù)但同時(shí)另一列值為 NULL 的行時(shí),可以使用 sql 查詢。

考慮以下場(chǎng)景:

數(shù)據(jù)的datas表中存儲(chǔ)了以下信息:

credit company name phone id pid
99284 傳媒有限公司 張三 3930 21d4f7 null
99284 傳媒有限公司 張三 3930 21d4f7 6ec897
99284 傳媒有限公司 王五 1895 2c6dcd 21d4f7
99284 傳媒有限公司 王五 1895 a8c70b 21d4f7
99284 傳媒有限公司 李四 9894 33db09 21d4f7
99284 傳媒有限公司 李四 9894 703e16 null
99284 傳媒有限公司 李四 9894 0faa54 21d4f7

目標(biāo)是刪除credit、company、name、phone和id字段相同但pid為空的行,而保留pid不為空的行。

解決方案:

DELETE FROM datas  WHERE pid IS NULL AND (credit, company, name, phone, id, rootid) IN (     SELECT credit, company, name, phone, id, rootid      FROM datas      WHERE pid IS NOT NULL );

此查詢使用以下步驟:

  1. 從datas表中選擇所有pid為空的行。
  2. 使用in子查詢從pid不為空的行中選擇credit、company、name、phone和id字段的組合。
  3. 刪除與子查詢中選擇的組合匹配的pid為空的行。

執(zhí)行此查詢將刪除以下行:

credit company name phone id pid
99284 傳媒有限公司 李四 9894 703e16 null

保留以下行:

credit company name phone id pid
99284 傳媒有限公司 張三 3930 21d4f7 6ec897
99284 傳媒有限公司 王五 1895 2c6dcd 21d4f7
99284 傳媒有限公司 王五 1895 a8c70b 21d4f7
99284 傳媒有限公司 李四 9894 33db09 21d4f7
99284 傳媒有限公司 李四 9894 0faa54 21d4f7

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享