Mysql語句查詢指定重複記錄和刪除重複記錄僅保留一條【親測可以】
對於髒資料,除了通過程式來修復,也可以通過mysql本身來修復。
問題一:查詢指定組合欄位的重複記錄
SELECT
*
FROM
tb_teacher a
WHERE
(a.user_id, a.create_time) IN (
SELECT
user_id,
create_time
FROM
tb_teacher
WHERE
type = 3
GROUP BY
user_id,
create_time
HAVING
count(*) > 3
)
AND a.id NOT IN (
SELECT
min(id)
FROM
tb_teacher
GROUP BY
user_id,
create_time
HAVING
count(*) > 1
);
點評:select的組合查詢比較常規,可以通過表別名來識別子表。刪除的就更為複雜。
問題二:刪除指定組合欄位的重複記錄並僅保留一條最小ID記錄
DELETE
FROM
tb_teacher
WHERE
(user_id, create_time) IN (
SELECT
*
FROM
(
SELECT
user_id,
create_time
FROM
tb_teacher
WHERE
type = 3
GROUP BY
user_id,
create_time
HAVING
count(*) > 3
) b
)
AND id NOT IN (
SELECT
*
FROM
(
SELECT
min(id)
FROM
tb_teacher
GROUP BY
user_id,
create_time
HAVING
count(*) > 1
) c
);
點評:相對select,delete 表現得更為苛刻,具體表現和解決方法如下:
1.使用mysql進行delete from操作時,若子查詢的 FROM 字句和更新/刪除物件使用同一張表,會出現錯誤。
mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 );
ERROR 1093 (HY000): You can’t specify target table ‘tab1′ for update in FROM clause
針對“同一張表”這個限制,撇開效率不談,多數情況下都可以通過多加一層select 別名表來變通解決,像這樣
DELETE FROM tab1
WHERE col1 = (
SELECT MAX( col1 )
FROM (
SELECT * FROM tab1
) AS t
);
------------------------------------------------------------------------
2. mysql delete from where in 時後面 的查詢語句裡不能加where條件
Sql程式碼
delete from `t_goods` where fi_id in (select * from ( select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null) b)
Sql程式碼
delete from `t_goods` where fi_id in (select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null)
Sql程式碼
delete from `t_goods` where fi_id in ( select fi_id from `t_goods` )
上面三種情況,只有中間的不能執行。
綜合起來就是mysql delete from where in 時後面 的查詢語句裡不能加where條件
---------------------------------------------------------------------------
3. delete from table... 這其中table不能使用別名
Sql程式碼
delete from student a where a.id in (1,2);(執行失敗)
select a.* from student a where a.id in (1,2);(執行成功)
參考:https://blog.csdn.net/tjcyjd/article/details/8950621 相關文章
- MySQL刪除重複記錄並保留第一條MySql
- sql刪除重複記錄只保留一條SQL
- Oracle如何刪除表中重複記錄保留第一條Oracle
- MariaDB刪除重複記錄效能測試
- 刪除重複id的記錄
- excel刪除重複資料保留一條 如何刪掉重複資料只留一條Excel
- mysql刪除一條記錄MySql
- 使用SQL語句去掉重複記錄的兩種方法SQL
- sql根據多個欄位查詢重複記錄SQL
- MySQL資料庫中刪除重複記錄的方法總結[推薦]MySql資料庫
- mysql 刪除重複項MySql
- MySQL防止重複插入相同記錄 insert if not existsMySql
- mysql 查詢出重複資料的第一條MySql
- MySql避免重複插入記錄的幾種方法MySql
- 查詢/刪除重複的資料(單個欄位和多個欄位條件)
- MySQL 查詢重複的資料MySql
- mysql快速新增百萬條記錄的語句MySql
- FCoE測試重啟除錯記錄除錯
- 刪除oracle重複值Oracle
- JavaScript 刪除重複字元JavaScript字元
- 刪除重複資料
- mysql 刪除表中重複的資料MySql
- 一句話查詢出指定節點的葉子記錄
- Excel查詢重複項Excel
- mongodb刪除重複資料MongoDB
- VSCode刪除重複的空行VSCode
- JavaScript 刪除字串重複字元JavaScript字串字元
- 一句話從 MySQL 取出重複行MySql
- mysql 隨機查詢記錄MySql隨機
- JavaScript陣列刪除重複元素JavaScript陣列
- sqlserver中刪除重複資料SQLServer
- JavaScript 刪除陣列重複元素JavaScript陣列
- Remove Duplicate Letters 刪除重複元素REM
- JavaScript刪除字串中重複字元JavaScript字串字元
- 降sci論文重複率,從28%到18%記錄
- mysql連表查詢出現資料重複MySql
- SqlServer中根據某幾列獲取重複的資料將其刪除並保留最新一條SQLServer
- Mysql-基本練習(09-刪除單表記錄、查詢指定列資料、列的別名、簡單單表條件查詢、簡單分組查詢)MySql