如何只获取表中的重复记录?

时间:2011-08-18 09:59:40

标签: sql hsqldb

我无法弄清楚如何更好地提出这个问题,所以我的搜索变得绝望。

我有一个包含三列(Column1,Column2,Column3)的表。有许多记录由不同的和相同的值组成。我想只获得与column1,column2和column3值完全相同的记录。如何在一般SQL中以最快的查询获取它们?特别是HSQLDB?

此外,如果我的表有4列(+ Column4),但仍需要column1,column2和column3值的相同记录。查询必须更改还是相同?

实施例

-------------------------------
| Column1 | Column2 | Column3 |
|    1    |    2    |   3     |  <-- A
|    2    |    2    |   30    |  <-- B
|    3    |    3    |   10    |
|    4    |    12   |   3     |  <-- C
|    1    |    3    |   3     |
|    1    |    4    |   3     |
|    1    |    5    |   3     |
|    4    |    12   |   3     |  <-- C
|    2    |    2    |   30    |  <-- B
|    1    |    2    |   3     |  <-- A
|    4    |    12   |   3     |  <-- C
-------------------------------

所以我需要选择所有 A,B和C记录。结果应该是;

-------------------------------
| Column1 | Column2 | Column3 |
|    1    |    2    |   3     |  <-- A
|    2    |    2    |   30    |  <-- B
|    4    |    12   |   3     |  <-- C
|    4    |    12   |   3     |  <-- C
|    2    |    2    |   30    |  <-- B
|    1    |    2    |   3     |  <-- A
|    4    |    12   |   3     |  <-- C
-------------------------------

-Result完全省略了不同的记录 -

2 个答案:

答案 0 :(得分:2)

通过与HAVING子句组合进行分组来获取它们。这也适用于HSQLDB。 HAVING子句从结果中删除所有数据,不包含多行。当你有一个包含4列的表时,你必须采用该语句。

SELECT Column1,Column2,Column3 FROM Table GROUP BY Column1,Column2,Column3 HAVING COUNT(*)>1
编辑

编辑以获取所有行

SELECT x.* FROM Table x INNER JOIN (
    SELECT Column1,Column2,Column3 FROM Table GROUP BY Column1,Column2,Column3 HAVING COUNT(*)>1
) y ON x.Column1=y.Column1 AND x.Column2=y.Column2 AND x.Column3=y.Column3

答案 1 :(得分:1)

SELECT Column1, Column2, Column3, count(*) from myTable
GROUP BY Column1, Column2, Column3

如果您不关心计数,可以省略Count(*)。 这是你想要的吗?

理解你想要的东西有点困难。您能举例说明您想要的输出结果吗?