2013-10-24 2 views
0
SELECT S2.A 
FROM S1, S2 
WHERE S1.A = S2.A 
GROUP BY S1.A 
HAVING COUNT(*) > 1; 

Действительно ли это действительный запрос?действительный или недействительный запрос GROUP BY

Потому что из того, что я понимаю, все, что находится в вашем предложении select, должно быть в вашем предложении group by, но этот запрос не следует за ним.

Однако, посмотрев на этот запрос, имеет смысл для меня, что вы выбираете значения атрибута A из S2, так что S1.A = S2.A, в результате чего число этого конкретного значения A S1 имеет больше, чем 1 запись.

+0

Вы должны сгруппировать в соответствии с тем, что вы выбрали, так что если вы выбрали 'S2.A' вы можете» t группой 'S1.A' ... – alfasin

+0

@alfasin« плохая вещь », но это не так в mysql ... –

+0

@ RaphaëlAlthaus мой плохой - я не заметил тег' mysql'. BTW, это * верно для PLSQL – alfasin

ответ

2

ну, вам не нужно иметь все, что не было агрегировано в вашем предложении select в group by, когда вы используете агрегацию IN MYSQL (так что ваше предположение является ANSIly правильным, но не для mysql).

Но как S1.A = S2.A, почему бы вам не выбрать S1.A?

Кстати, вы должны использовать JOIN, и я хотел бы написать запрос так:

SELECT S1.A 
FROM S1 
INNER JOIN S2 on S1.A = S2.A 
GROUP BY S1.A 
HAVING COUNT(*) > 1 
Смежные вопросы