2013-05-05 43 views
0

樣品表中的列選擇具有重複條目的所有字段基於每個類似的價值在另一列在MySQL

Table1 

Column A, Column B, Column C 
Blah, 3, Blue 
Foo, 3, Blue 
Bar, 2, Blue 
Joy, 1, Red 
To, 2, Red 
World, 2, Red 

我想找到的所有值B列是每個列c那是相同的相同。我的最終目標是創建一個觸發器,用於跟蹤這些條目並通知用戶需要注意衝突。

所以結果應該是這樣

Blah,3,Blue 
Foo,3,Blue 
To,2,Red 
World,2,Red 

正如在所有藍調3內被複制,在2是重複的所有紅色....等。

+1

標題中你有一個和b,問題b和c。並且在你的桌子上從來沒有匹配過。請重申您的問題。 – sashkello 2013-05-06 00:02:33

+1

並請顯示給定輸入數據的預期輸出。 – 2013-05-06 00:03:27

回答

0

如果我正確地解釋你的問題,你可以通過語句中使用的一組如

SELECT 
    COUNT(*) 
, b 
, c 
FROM table1 
GROUP BY b, c 

,這將給你的行數,如果有重複的,那麼計數會大於1。然後,您可以過濾下來只返回,爲了這個數量已經超過1行,所以最終的查詢可能是(從@ypercube幫助):

SELECT 
    COUNT(*) totalCount 
, b 
, c 
FROM table1 
GROUP BY b, c 
HAVING COUNT(*) > 1 
+0

你可以用'HAVING COUNT(*)> 1'做這個,不需要嵌套查詢。 – 2013-05-06 00:11:07

+0

啊好點,忘記了這一點:P – PaReeOhNos 2013-05-06 00:11:37

+0

這將找到所有有多個比賽的列b,但我想爲每個C做到這一點。 – Ryan 2013-05-06 00:14:07

0

我的最終目標是創建一個保持的觸發器跟蹤這些條目並通知用戶需要注意衝突。

我不能說出什麼「需要注意」。難道{3,藍}應該只出現一次,它可能與BlahFoo相關聯,但不是兩者都是?如果是這樣,請在該對列上聲明UNIQUE約束,並節省編寫觸發器的麻煩。一盎司的預防值得一磅治療。

觸發器並不意味着建議;它們旨在強制執行無法聲明的約束條件。將它們用於任何其他目的可能是誘人的,但會以眼淚結束。

相關問題