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函数,即B1和B2 )表与自身并比较列 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列中有重复的条目。
输出: