2015-11-20 137 views
1

我面临着以下问题:替代GROUP BY/HAVING使用MySQL

拿出列出的人(PNAME)谁拥有一个以上的车(你不能使用GROUP BY和查询/或HAVING)

使用下面的数据库模式:

车辆(licplate *,年份,牌子,型号,价格,PNAME)

这是我想查询使用

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

我一直在试图想出一种方法来做到这一点,根据规范,但我没有任何成功。有人能通过这样做的逻辑指导我吗?

谢谢您的阅读。

+0

什么是不使用Groupby和Having的具体原因? “你不能使用GROUP BY和/或HAVING” –

+0

作为PK分配pname可能有缺陷吗? – Strawberry

+0

这只是练习题的一部分。我认为原因只是练​​习 – Sektrax

回答

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!v1 = v2的PK

+0

我看到... 我们有之前使用过这种别名方法,我不知道我没有看到它。也许我只是过分复杂这些查询。 谢谢@StanislavL – Sektrax

2

您是否尝试过使用Subquery

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

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

我认为这与问题的精神相悖。另外,因为这是作业,所以提供完整的答案似乎有点不雅。 – Strawberry

+0

我只是试图完成关于不使用HAVING和/或GROUP BY条件的问题要求。无论如何,你可以使用DISTINCT和JOIN实现相同的结果。 –

+0

是的,或者只是JOIN – Strawberry