📜  SQL中如何根据表的一列消除重复值?

📅  最后修改于: 2022-05-13 01:55:23.590000             🧑  作者: Mango

SQL中如何根据表的一列消除重复值?

在 SQL 中,某些行在一列中包含重复的条目。为了删除这些行,我们需要使用DELETE关键字以及自连接表。下图也一样。对于本文,我们将使用 Microsoft SQL Server 作为我们的数据库。

第 1 步:创建数据库。为此,请使用以下命令创建一个名为 GeeksForGeeks 的数据库。

询问:

CREATE DATABASE GeeksForGeeks

输出:

第 2 步:使用 GeeksForGeeks 数据库。为此,请使用以下命令。

询问:

USE GeeksForGeeks

输出:

第 3 步:在 GeeksForGeeks 数据库中创建一个表 BONUSES。该表有 3 列,即 EMPLOYEE_ID、EMPLOYEE_NAME 和 EMPLOYEE_BONUS,其中包含员工 id、员工姓名和他/她的奖金。

询问:

CREATE TABLE BONUSES(
EMPLOYEE_ID INT,
EMPLOYEE_NAME VARCHAR(10),
EMPLOYEE_BONUS INT);

输出:

第 4 步:描述表 BONUSES 的结构。

询问:

EXEC SP_COLUMNS BONUSES;

输出:

第 5 步:在 BONUSES 表中插入 10 行。

询问:

INSERT INTO BONUSES VALUES(1,'RAJ',10000);
INSERT INTO BONUSES VALUES(2,'RAJIV',10000);
INSERT INTO BONUSES VALUES(3,'RAJ',20000);
INSERT INTO BONUSES VALUES(4,'SAMEER',20000);
INSERT INTO BONUSES VALUES(5,'PANKAJ',30000);
INSERT INTO BONUSES VALUES(6,'HARRY',30000);
INSERT INTO BONUSES VALUES(7,'VAUN',40000);
INSERT INTO BONUSES VALUES(8,'SANGWOO',40000);
INSERT INTO BONUSES VALUES(9,'SAM',50000);
INSERT INTO BONUSES VALUES(10,'TIM',50000);

输出:

第 6 步:显示 BONUSES 表的所有行。

询问:

SELECT * FROM BONUSES;

输出:

第 7 步:从表BONUSES中删除在EMPLOYEE_BONUS列中有重复条目的行。为了实现这一点,我们使用DELETE函数通过自连接(在表的 2 个别名上使用JOIN函数,即B1B2 )表与自身并比较列 EMPLOYEE_BONUS 的条目以获得列EMPLOYEE_ID的不同条目,因为 ID 是唯一的为每位员工。

句法:

DELETE T1 FROM TABLE_NAME T1
JOIN TABLE_NAME T2
ON T1.COLUMN_NAME1 = T2.COLUMN_NAME1
AND T2.COLUMN_NAME2 < T1.COLUMN_NAME2;

询问:

DELETE B1 FROM BONUSES B1
JOIN BONUSES B2
ON B1.EMPLOYEE_BONUS = B2.EMPLOYEE_BONUS
AND B2.EMPLOYEE_ID < B1.EMPLOYEE_ID;

输出:

第 8 步:显示更新后的BONUSES表的所有行。

询问:

SELECT * FROM BONUSES;

注意EMPLOYEE_BONUS列中没有任何行有重复条目。

输出:

第 9 步:从表BONUSES中删除在EMPLOYEE_NAME列中有重复条目的行。

询问:

DELETE B1 FROM BONUSES B1
JOIN BONUSES B2
ON B1.EMPLOYEE_NAME = B2.EMPLOYEE_NAME
AND B2.EMPLOYEE_ID < B1.EMPLOYEE_ID;

输出:

第 10 步:显示更新后的BONUSES表的所有行。

询问:

SELECT * FROM BONUSES;

注意:没有行在EMPLOYEE_NAME列中有重复的条目。

输出: