📜  sql 根据两列选择重复项 - SQL (1)

📅  最后修改于: 2023-12-03 15:20:17.315000             🧑  作者: Mango

SQL 根据两列选择重复项

在 SQL 中,我们可以使用 GROUP BYHAVING 子句来筛选重复项。但如果我们要根据两列来选择重复项,该怎么办呢?本文将介绍如何在 SQL 中根据两列选择重复项。

使用 GROUP BY 和 HAVING

如果我们只需要根据一列选择重复项,可以使用 GROUP BYHAVING 子句:

SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1;

这条语句将根据 column_name 列选择重复项,并输出每个重复项出现的次数。如果你不需要知道每个重复项出现的次数,也可以像下面这样简化语句:

SELECT column_name
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1;

但如果我们需要根据两列选择重复项,就不能这么简单了。

使用子查询

我们可以通过使用子查询来实现根据两列选择重复项的目的。具体做法是,先使用 GROUP BYHAVING 子句根据两列选择出重复项,然后将结果作为子查询,在主查询中使用 IN 子句将其与原表连接起来。例如:

SELECT *
FROM table_name
WHERE (column_1, column_2) IN (
  SELECT column_1, column_2
  FROM table_name
  GROUP BY column_1, column_2
  HAVING COUNT(*) > 1
);

这条语句将根据 column_1column_2 列选择重复项,并输出这些重复项在原表中的所有列。如果你只需要输出某些列的值,可以在主查询中指定这些列:

SELECT column_name1, column_name2
FROM table_name
WHERE (column_1, column_2) IN (
  SELECT column_1, column_2
  FROM table_name
  GROUP BY column_1, column_2
  HAVING COUNT(*) > 1
);

需要注意的是,这种做法可能会比较慢,因为需要进行两次查询。如果你的表比较大,可能需要想办法优化。例如,你可以先创建一个有两列的虚拟表,将需要选择的两列的值插入到该表中,然后使用 JOIN 或者 EXISTS 子句来连接表。但这种做法比较繁琐,如果不是必要的,建议不要使用。