使用MySQL的GROUP BY / HAVING的替代方案

时间:2015-11-20 07:05:39

标签: mysql sql sqlfiddle

我遇到了以下问题:

  

提出一个查询,列出拥有多辆汽车的人(pname)(你不能使用GROUP BY和/或HAVING)

     

使用以下数据库架构:

     

车辆(licplate *,年份,品牌,型号,成本,pname)

这是我想要使用的查询

select pname from vehicle
group by pname
having count(*) > 1;

我一直试图按照规范想出办法,但我没有取得任何成功。有人可以引导我完成这样做的逻辑吗?

感谢您的阅读。

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用Subquery

使用您的表作为参考,它应该是这样的

SELECT 
p.pname
FROM person AS p
WHERE
(SELECT count(*) FROM vehicle where pname = p.pname) > 1

答案 1 :(得分:2)

select * from 
    (select *, 
        if (@name= pname, 1,0) as flag,
        @name:= pname as pn
     from vehicle
     order by pname) sub
where sub.flag=1;

SQL fiddle

我们也可以添加DISTINCT以涵盖超过2辆车时的情况

更新:

Select *
from vehicle v1
     join vehicle v2 on v1.pname=v2.pname 
                        and (v1.id!=v2.id)

而不是v1.id!= v2.id你可以添加v1的主键检查PK!= v2的PK