2012-11-05 52 views
1

我有3個表是這樣的:了重複計數和數據表

TABLE_1

+-ID-+-table_3_id-+ 
| 1 |   1 | 
| 2 |   1 | 
| 3 |   2 | 
+----+------------+ 

TABLE_2

+-ID-+-table_1_id-+-name--+-value-+ 
| 1 |   1 | Name1 | Data1 | 
| 2 |   1 | Name2 | Data2 | 
| 3 |   1 | Name3 | Data3 | 
| 4 |   2 | Name1 | Data1 | 
| 5 |   2 | Name2 | Data4 | 
| 6 |   2 | Name3 | Data5 | 
| 7 |   3 | Name1 | Data6 | 
| 8 |   3 | Name2 | Data2 | 
+----+------------+-------+-------+ 

表3由ID和其他的數據是無關的這題。但是,我需要能夠在table_3_id上進行過濾。

這就是我需要的: 表2有多個行,其中包含table_1中行的信息。我需要一個查詢來檢查「數據」列中是否有重複項,它們具有相同的「名稱」。我需要的結果會是這樣(用WHERE table_3_id = 1):

+-table_3_id-+-name--+-value-+-duplicate-+ 
|   1 | Name1 | Data1 | true  | 
|   1 | Name2 | Data2 | false  | 
|   1 | Name3 | Data3 | false  | 
+------------+-------+-------+-----------+ 

或者,如果可能的話,只能從TABLE_2返回數據,其中它實際上是重複的。 '重複'字段也可以是一個計數,因爲我知道具有相同table_3_id的行數。

我希望我已經清楚了我的問題。如果不夠清楚,我會盡力改善它。我已經用連接和子查詢嘗試過了,但是我的SQL知識還不足以做出像這樣的高級查詢。我更喜歡在一個單一的查詢中,而不是PHP中的多個。

回答

2

您可以使用的東西沿着以下線路:

select Name 
from table 
group by name 
having count(*) > 1 
+0

謝謝!從來沒有想過'擁有'。它像一個魅力! –

1

您需要爲您在TABLE_2每一行,如果有重複。這可以用一個子查詢來完成,像這樣:

SELECT 
    B.Table_3_ID 
    ,A.Name 
    ,A.Value 
    ,(SELECT COUNT(*) FROM Table_2 C 
     WHERE C.Name = A.Name AND C.Value = A.Value) 
    AS DuplicateCount 
FROM Table_2 A 
INNER JOIN Table_1 B 
    ON A.Table_1.ID = B.ID 

有可能是在我的SQL一些錯誤,尤其是表的別名,因爲我目前沒有語法檢查,但原則應該工作。