2011-08-18 37 views
2

我想不出如何更好地提出這個問題,所以我的搜索變得絕望。如何只獲得表中的重複記錄?

我有一個三列(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省略完全不同的紀錄─

回答

1

通過結合一個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 
+0

好吧,這與1行工作。但我需要查看所有記錄。 –

+0

看到我編輯的答案 – rabudde

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

可以省略Count(*)如果你不關心計數。 這是你想要的嗎?

這很難理解你想要什麼。你能舉一個你想要的輸出結果的例子嗎?

+0

我添加了一個結果,我希望看到。 –