MySQL查詢重覆數據

来源:https://www.cnblogs.com/woods1815/archive/2020/05/16/12901717.html
-Advertisement-
Play Games

假設有一個用戶表 user,數據如下: 1、查詢表中 uid 重覆的數據 SELECT id, uid, name FROM USER WHERE uid IN (SELECT uid FROM USER GROUP BY uid HAVING COUNT(uid) > 1); 2、查詢表中重覆數據 ...


 

假設有一個用戶表 user,數據如下:

1、查詢表中 uid 重覆的數據

SELECT
  id,
  uid,
  name
FROM USER
WHERE uid IN (SELECT
    uid
  FROM USER
  GROUP BY uid
  HAVING COUNT(uid) > 1);

2、查詢表中重覆數據,排除最小id

SELECT
  id,
  uid,
  name
FROM user
WHERE uid IN (SELECT
    uid
  FROM user
  GROUP BY uid
  HAVING COUNT(uid) > 1)
AND id NOT IN (SELECT
    MIN(id)
  FROM user
  GROUP BY uid
  HAVING COUNT(uid) > 1);

3、刪除表中重覆數據,如果是重覆數據,則保留id最小的一條

DELETE
  FROM USER
WHERE id IN (SELECT
      u.id
    FROM (SELECT
        id
      FROM USER
      WHERE uid IN (SELECT
          uid
        FROM USER
        GROUP BY uid
        HAVING COUNT(uid) > 1)
      AND id NOT IN (SELECT
          MIN(id)
        FROM USER
        GROUP BY uid
        HAVING COUNT(uid) > 1)) AS u);

4、遇到的問題:

一開始直接使用以下語句刪除,報錯:You can’t specify target table ‘user’ for update in FROM clause

 

DELETE
  FROM USER
WHERE id IN (SELECT
      id
    FROM USER
    WHERE uid IN (SELECT
        uid
      FROM USER
      GROUP BY uid
      HAVING COUNT(uid) > 1)
    AND id NOT IN (SELECT
        MIN(id)
      FROM USER
      GROUP BY uid
      HAVING COUNT(uid) > 1));

 

查資料後得知:
因為在 MYSQL 里,不能先 select 一個表的記錄,在按此條件進行更新和刪除同一個表的記錄。
解決辦法:
將 select 得到的結果,再通過中間表 select 一遍。
SQL如下:

 

DELETE
  FROM USER
WHERE id IN (SELECT
      u.id
    FROM (SELECT
        id
      FROM USER
      WHERE uid IN (SELECT
          uid
        FROM USER
        GROUP BY uid
        HAVING COUNT(uid) > 1)
      AND id NOT IN (SELECT
          MIN(id)
        FROM USER
        GROUP BY uid
        HAVING COUNT(uid) > 1)) AS u);

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近老闆沉迷於抖音,時不時在那邊呵呵傻笑,於是我偷偷湊過去一看,好家伙,他正在看朱一旦~ 這天,老闆幽幽地走到我身邊,淡淡地跟我說,良許,你要是能找到公司里混水摸魚的人,我就給你漲薪!我回過頭,望著他朱一旦似的枯燥笑臉,自信說道,放心,有我在,公司里就沒有摸魚的人! 作為一名資深摸魚專家,熟知 10 ...
  • 內核編譯步驟及模塊管理 設定內核參數的方法: echo VALUE > /proc/sys/TO/SOMEFILE sysctl -w kernel.hostname= 能立即生效,但無法永安有效。 永久有效需要修改配置文件/etc/syctl.conf 修改完配置文件不會理解生效,需要執行以下命令 ...
  • 內核中常用的分配物理記憶體頁面的介面函數是alloc_pages(),用於分配一個或者多個連續的物理頁面,分配頁面個數只能是2個整數次冪。相比於多次分配離散的物理頁面,分配連續的物理頁面有利於提高系統記憶體的碎片化,記憶體碎片化是一個很讓人頭疼的問題。alloc_pages()函數有兩個,一個是分配gfp ...
  • (1)先來先服務調度演算法(FCFS)(作業、進程調度):演算法簡單,但效率較低;有利於長作業,但對短作業不利,有利於CPU繁忙型作業,不利於I/O繁忙型作業。(2)短作業優先調度演算法(SJF)(作業):運行時間短的作業優先執行,該演算法對長作業不利,易造成“饑餓”問題,即長作業由於優先順序低可能長期得不到 ...
  • 好久沒更新博客了,今年整體行業不太樂觀,在朋友的引薦下進了新的東家討口飯吃,難得清靜下來一個周末,好吧,廢話不多說了, 今天更新了windows 的docker客戶端docker-toolbox, 發現原來的docker login -u 用戶名 -p 密碼 使用不了。這次更新的應該是最新版:htt ...
  • 一.安裝部署 "1.Zabbix部署" "2.Nessus簡介與安裝" "3.Ceph安裝" "4.Graylog 安裝" "5.Centos6.10 安裝Python 2.7.16" 更新中... 二.Linux運維 更新中... ...
  • BIOS 中英文對照表 轉載於https://www.dell.com/support/article/zh-cn/sln262122/bios-%E4%B8%AD%E8%8B%B1%E6%96%87%E5%AF%B9%E7%85%A7%E8%A1%A8?lang=zh 註意:機型不同 BIOS 版 ...
  • Redis 系列: 1. "Redis系列(一)Redis入門" 2. "Redis系列(二)Redis的8種數據類型" 3. "Redis系列(三)Redis的事務和Spring Boot整合" 4. "Redis系列(四)Redis配置文件和持久化" 5. "Redis系列(五)發佈訂閱模式、主 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...