2012-02-08 64 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 2012-02-08 20:53:26

+0

@AlasdairC您的sup查詢返回多少個標題?還有,你在我的查詢中改變了什麼? – 2012-02-08 20:55:13

+0

以爲我沒有,但在第二次看,它完全確實返回正確數量的結果,每個標題出現不止一次,這正是我需要,謝謝。 – AlasdairC 2012-02-08 21:13:56

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

如果我在p1.pid之前加入'distinct',它會返回與@ Bassam-mehanni的答案相同的數字 – AlasdairC 2012-02-08 21:17:03