2015-11-20 2 views
1

я столкнулся со следующей проблемой:Альтернативы GROUP BY/HAVING с использованием MySQL

Придумайте с запросом, в котором перечислены люди (PNAME), которые владеют более чем один автомобиль (вы не можете использовать GROUP BY и/или HAVING)

Используйте следующую схему базы данных:

автомобиль (licplate *, год, марка, модель, стоимость, PNAME)

Вот запрос, я хотел бы использовать

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

Я пытался придумать способ сделать это согласно спецификации, но я не имел никакого успеха. Может ли кто-нибудь вести меня через логику этого?

Благодарим вас за чтение.

+0

Какова конкретная причина не использовать Groupby и иметь? «вы не можете использовать GROUP BY и/или HAVING» –

+0

Возможно, существует ошибка в назначении 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 вы можете добавить Первичный ключ проверки PK из v1! = PK из v2

+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

Да, или просто ПРИСОЕДИНЯЙТЕСЬ – Strawberry

Смежные вопросы