2011-01-23 58 views
3

我不知道如何詞組這個問題,所以我舉一個例子:如何才能爲特定列選擇只有多個匹配的行?

假設有一個叫tagged有兩列的表:taggertaggee。 SQL查詢看起來像怎樣才能返回多行中的taggee(s)?也就是說,它們已被任何tagger標記了2次或更多次。

我想'通用'的SQL查詢,而不是隻適用於特定DBMS的東西。

編輯:添加「由任何 tagger標記2次或更多次」。

回答

9

HAVING可以在聚合函數的結果操作被加了標籤。所以,如果你有這樣的數據:

Row tagger | taggee 
     --------+---------- 
1.  Joe  | Cat 
2.  Fred | Cat 
3.  Denise | Dog 
4.  Joe  | Horse 
5.  Denise | Horse 

這聽起來像你想

若要取得多個列中的TAGGEE的,可以執行:

SELECT taggee, count(*) FROM tagged GROUP BY taggee HAVING count(*) > 1 

話雖這麼說,當你說「選擇一個特定的列只與多命中行」,這做你要?您是否想要爲行裝訂或行?

+0

按標籤分組不會確保重複項是針對相同標籤的。 – 2011-01-23 05:43:54

0
select distinct t1.taggee from tagged t1 inner join tagged t2 
     on t1.taggee = t2.taggee and t1.tagger != t2.tagger; 

會給你所有誰被標記由一個以上的惡搞

相關問題