如何在 SQL 中跨多个列查找重复值?
在 SQL 中,有时我们需要在单个查询中查找跨表中多个列的重复条目。我们将使用 GROUP BY 和 COUNT 关键字来实现这一点。为此,我们使用下面演示中显示的特定类型的查询。对于本文,我们将使用 Microsoft SQL Server 作为我们的数据库和 Select 关键字。
第 1 步:创建数据库。为此,请使用以下命令创建一个名为 GeeksForGeeks 的数据库。
询问:
CREATE DATABASE GeeksForGeeks
输出:
第 2 步:使用 GeeksForGeeks 数据库。为此,请使用以下命令。
询问:
USE GeeksForGeeks
输出:
第 3 步:在 GeeksForGeeks 数据库中创建一个 POSTINGS 表。该表有 4 列,即 POSTING_ID、OFFICER_NAME、TEAM_SIZE 和 POSTING_LOCATION,分别包含 id、官员姓名、团队规模和外交服务在不同国家/地区的发布位置。
询问:
CREATE TABLE POSTINGS(
POSTING_ID INT,
OFFICER_NAME VARCHAR(10),
TEAM_SIZE INT,
POSTING_LOCATION VARCHAR(10));
输出:
第 4 步:描述表 POSTINGS 的结构。
询问:
EXEC SP_COLUMNS POSTINGS;
输出:
第 5 步:在 POSTINGS 表中插入 5 行。
询问:
INSERT INTO POSTINGS VALUES(1,'RYAN',10,'GERMANY');
INSERT INTO POSTINGS VALUES(2,'JACK',6,'ROMANIA');
INSERT INTO POSTINGS VALUES(3,'JANE',4,'HAWAII');
INSERT INTO POSTINGS VALUES(4,'JIM',10,'GERMANY');
INSERT INTO POSTINGS VALUES(5,'TIM',10,'GERMANY');
INSERT INTO POSTINGS VALUES(6,'RYAN',11,'GERMANY');
INSERT INTO POSTINGS VALUES(7,'RYAN',10,'GERMANY');
INSERT INTO POSTINGS VALUES(8,'RYAN',10,'GERMANY');
INSERT INTO POSTINGS VALUES(9,'JACK',6,'CUBA');
INSERT INTO POSTINGS VALUES(10,'JACK',6,'HAITI');
输出:
第 6 步:显示 POSTINGS 表的所有行。
询问:
SELECT * FROM POSTINGS;
输出:
第 7 步:在POSTINGS表的OFFICER_NAME 、 TEAM_SIZE和POSTING_LOCATION的 3(多个)列中查找重复项。为此,我们需要按这三列对记录进行分组,并显示计数大于 1 的记录,即具有匹配值的记录。使用关键字GROUP BY和COUNT 。
句法:
SELECT COLUMN_NAME1, COLUMN_NAME2,
COLUMN_NAME3, COUNT(*) AS ALIAS
FROM TABLE_NAME
GROUP BY COLUMN_NAME1, COLUMN_NAME2,
COLUMN_NAME3 HAVING COUNT(*)>1;
询问:
SELECT OFFICER_NAME, TEAM_SIZE,
POSTING_LOCATION, COUNT(*) AS QTY
FROM POSTINGS
GROUP BY OFFICER_NAME, TEAM_SIZE,
POSTING_LOCATION HAVING COUNT(*)>1;
输出:
第 8 步:在 2(多个)列中查找重复项,即在表POSTINGS中的TEAM_SIZE和POSTING_LOCATION中。
询问:
SELECT TEAM_SIZE, POSTING_LOCATION,
COUNT(*) AS QTY
FROM POSTINGS
GROUP BY TEAM_SIZE, POSTING_LOCATION
HAVING COUNT(*)>1;
输出:
第 9 步:在POSTINGS表的OFFICER_NAME和TEAM_SIZE的 2(多个)列中查找重复项。
询问:
SELECT OFFICER_NAME, TEAM_SIZE,
COUNT(*) AS QTY
FROM POSTINGS
GROUP BY OFFICER_NAME,
TEAM_SIZE HAVING COUNT(*)>1;
输出: