📜  如何在 SQL 中跨多个列查找重复值?

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

如何在 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_NAMETEAM_SIZEPOSTING_LOCATION的 3(多个)列中查找重复项。为此,我们需要按这三列对记录进行分组,并显示计数大于 1 的记录,即具有匹配值的记录。使用关键字GROUP BYCOUNT

句法:

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_SIZEPOSTING_LOCATION中。

询问:

SELECT TEAM_SIZE, POSTING_LOCATION, 
COUNT(*) AS QTY
FROM POSTINGS
GROUP BY TEAM_SIZE, POSTING_LOCATION
 HAVING COUNT(*)>1;

输出:

第 9 步:POSTINGS表的OFFICER_NAMETEAM_SIZE的 2(多个)列中查找重复项。

询问:

SELECT OFFICER_NAME, TEAM_SIZE, 
COUNT(*) AS QTY
FROM POSTINGS
GROUP BY OFFICER_NAME, 
TEAM_SIZE HAVING COUNT(*)>1;

输出: