sql自连接问题

在产品表中查询产品名称、规格一样的产品有哪些:
要求出的结果有:产品编号、产品名称、规格
cp(产品表):产品编号、产品名称、规格
[b]问题补充:[/b]
zhoun 你的查询是能实现出来大概功能 但是没有查询出来产品编号啊 还有 我想问下 这里的 having count(产品编号)>1怎么理解啊?
[b]问题补充:[/b]
哦 非常感谢你的帮助 不过我还想把编号字段也一起查询出来 能在这个sql语句上加以修改然后让编号也一同显示出来么 万分感谢……
[b]问题补充:[/b]
既然要查询出来所有字段,用group by 自然不行,因为取不出来编号的,我知道用自连接可以实现,但是现在不记得具体概念了了 实现起来有些困难 还请大家一起探讨研究 一旦行通 一起学习了~~
[b]问题补充:[/b]
题目确实很崩人,这个题的确不是考察group by用法 而确实时考察自连接问题,用分组做出来的查询不出编号,你实际的考虑,我查询库存信息中想知道那些编号的产品的名称和规格一样 的时候是否需要显示编号呢 而group by 就显示不出编号啊。。。。。。继续求答案ing
[b]问题补充:[/b]
是查产品名称和规格一样的产品的产品编号、产品名称、规格。
[b]问题补充:[/b]
谢谢大家!我自己试出来的答案是这样的:两表做笛卡尔积 (自连接)然后进行查询的 还请大家多多指点..

select distinct a.* from cp a,cp b where a.产品名称=b.产品名称 and a.规格=b.规格 and a.产品编号!=b.产品编号

[code="sql"]select 产品名称, 规格, group_concat(产品编号)
from cp

group by 产品名称, 规格
having count(产品编号) > 1 [/code]

Mysql 提供group_concat函数

[code="sql"]select 产品名称, 规格
from cp
group by 产品编号
having count(*) > 1[/code]

上个写错了, 应该是下面这样

[code="sql"] select 产品名称, 规格

from cp

group by 产品名称, 规格
having count(产品编号) > 1 [/code]

select * from cp a where a.产品名称 in(select distinct b.产品名称,b.规格 form cp b)

having count(产品编号) > 1 就说明至少有两个产品在这个组里 也就是你说的产品名称、规格一样的产品

用我那个肯定没问题的
[code="java"]
select * from cp a where a.产品名称 in(select distinct b.产品名称,b.规格 form cp b)
[/code]

select c.* from cp c where c.产品编号 in(select distinct c.产品编号 from cp c group by c.产品规格 having count(c.产品编号)>1
看看,行不

用这句,试过了,可以,不过不知道效率如何,有没有更好的
select * from product w,
(select a.id myid,count(1) from product a,product b
where a.name=b.name and a.type=b.type group by a.id having count(1)>1) q
where w.id = q.myid

如果用hibernate,或许可以这样:
[code="java"]select cp.产品编号, cp.产品名称, cp.规格
from cp
where (cp.产品名称, cp.规格) in
(select cp.产品名称, cp.规格 from cp
group by cp.产品名称, cp.规格

having count(cp.产品编号) > 1)[/code]