2012-02-08 13 views
2

サブタイトルとして次のものを使用しているので、同じタイトルを持つすべての製品について、pidのインデックスを投影します。sql GROUP HAVING選択

製品(PID、タイトル)

SELECT p.title 
FROM product p 
group by title 
HAVING (COUNT(p.title) > 1) 

これは、重複タイトル罰金出力が、どのように私はPID年代ではなく、プロジェクトのですか?ここ

答えて

5
SELECT p.pid, p.title 
FROM product p 
    INNER JOIN 
    (SELECT p.title 
     FROM product p 
     GROUP BY title 
     HAVING (COUNT(p.title) > 1)) t ON t.title = p.title 

はsqlfiddleを扱うことの一例です:

http://sqlfiddle.com/#!3/25e77/1

+0

申し訳ありませんが、これは38000件のレコードを返し、デシベルで唯一の51重複したタイトルがあります。 – AlasdairC

+0

@AlasdairCあなたのsupクエリが返すタイトルの数はいくつですか?また、私のクエリで何か変更しましたか? –

+0

私は思っていませんでしたが、セカンドルックでは、結果の正しい数、何度も表示されるすべてのタイトルのpidを返します。 – AlasdairC

1

私は、自己結合が、この場合に最も簡単な答えだと思います。我々は異なるのPIDが、同じタイトルのためにテストしているかに注目してください:

SELECT p1.pid FROM products p1 JOIN products p2 
       ON p1.pid <> p2.pid AND p1.title = p2.title; 

(私はここでそれをテストした:http://sqlfiddle.com/#!2/c8b8d/18)を

+0

もし私が 'distinct'をp1.pidの前に置くと、@ Bassam-mehanniの答えと同じ番号を返します – AlasdairC