在MYSQL中,如果想要去掉一個表中的重復數據,可以使用DISTINCT關鍵字,但是這種方法并不能真正地去掉重復的數據,只能將重復的數據以唯一的形式顯示出來。如果要完全去掉表中的重復數據,需要使用DELETE和GROUP BY語句。
DELETE FROM 表名 WHERE 主鍵 NOT IN (SELECT MIN(主鍵) FROM 表名 GROUP BY 列名);
以上的代碼可以保留每個重復數據中最小的主鍵,而將其他相同的數據從表中刪除。
例如,我們有一個名為“employees”的表,其中包含員工的姓名(name)和郵箱地址(email)?,F在有一個問題,因為某些原因,其中有一些員工出現了重復的條目,怎么辦?
CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL ); INSERT INTO employees (name, email) VALUES ('John Doe', 'john.doe@example.com'), ('Jane Doe', 'jane.doe@example.com'), ('William Smith', 'william.smith@example.com'), ('John Doe', 'j.doe@example.com'), ('William Smith', 'wsmith@example.com'), ('Jane Doe', 'janedoe@example.com');
現在,如果我們想要去掉表中的重復數據,可以使用以下代碼:
DELETE FROM employees WHERE id NOT IN ( SELECT min_id FROM ( SELECT MIN(id) AS min_id FROM employees GROUP BY name, email ) AS x );
該語句首先使用GROUP BY語句將重復的數據分組,然后使用INNER JOIN找到最小的主鍵(id),并且使用DELETE語句刪除了其余的重復數據?,F在,我們有一個不包含重復數據的完整“employees”表。