2012-02-08 129 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