我无法弄清楚如何更好地提出这个问题,所以我的搜索变得绝望。
我有一个包含三列(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完全省略了不同的记录 -
答案 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(*)
。
这是你想要的吗?
理解你想要的东西有点困难。您能举例说明您想要的输出结果吗?