2015-11-20 138 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