2011-01-23 2 views
3

私はどのようにフレーズこの質問を私は例をあげるとわからない:taggertaggee特定の列に対して複数のヒットを持つ行のみを選択するにはどうすればよいですか?

は、2つの列がありtaggedというテーブルがあるとします。複数の行にあるtaggeeを返すために、SQLクエリはどのように見えますか?すなわち、それらはいずれかのtaggerによって2回以上タグ付けされている。

私は「一般的な」SQLクエリを望みますが、特定のDBMSでしか動作しません。

EDIT:任意のタグで2回以上タグ付けされました。

答えて

9

HAVINGをタグ付けされているすべてのtaggeesが集約関数の結果を操作することができますを与えるだろう。あなたはこのようなデータを持っているのであれば:

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

taggeeによるグループ化では、同じタガーの重複がないようにします。 –

+0

ああ、それは良い行です。私は特定の列を必要としないので、それを考慮に入れなかった。タグのリストだけだった。これは完璧です、ありがとうございます。 – styfle

+0

@OMG私が混乱していたポニー。私は依然として何が尋ねられているのかはまだ分かりません。それは「* a * taggerで2回以上タグ付けされている」と言いましたので、私はそれを要件として解釈しませんでした。 – Nicole

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

は、複数のタグ付けによって

関連する問題