2010-10-03 2 views
6

Дело в том, что оно возвращает одну строку.SQL: ОШИБКА: более одной строки, возвращаемой подзапросом, используемым как выражение

Вот что.

SELECT... 

FROM... 

WHERE... 

GROUP BY... 

HAVING randomNumber > (SELECT value FROM.....) 

Всякий раз, когда у меня есть знаки, такие как =,>, он всегда возвращает мне эту ошибку. Когда я это делаю, это не так.

Вы не должны использовать контрольные знаки по сравнению с другой таблицей?

+3

IN ожидает, что из подзапроса ожидается 1 или более значений. Операторы сравнения ожидают только одно возвращаемое значение. Ваша проблема в том, что вы используете сравнение по нескольким результатам из подзапроса. – 2010-10-03 05:17:05

ответ

6

При вводе:

SomeValue IN (SELECT ...) 

это эквивалентно использованию:

SomeValue = ANY (SELECT ...) 

Не используйте вторую запись - но она иллюстрирует точку. Когда SELECT возвращает более одного значения, вы должны использовать ЛЮБЫЕ или ВСЕ с компаратором. Когда вы опускаете ЛЮБЫЕ или ВСЕ, вы должны иметь SELECT, который возвращает ровно одно значение.

+0

Почему вы не рекомендуете использовать «SomeValue = ANY (SELECT ...)»? –

+0

Потому что знакомое правописание - 'SomeValue IN (SELECT ...)'. Люди (думают, что они) знают, что это значит, не глядя на них; им, вероятно, придется подумать, чтобы прийти к такому же выводу, если вы используете '= ANY'. Отрицательные версии еще сложнее: '! = ANY' и'! = ALL' - настоящая боль для сортировки. –

0

Вы можете указать несколько значений с помощью оператора IN. Если вы используете >, = , < и т. Д., Попробуйте использовать это:

HAVING randomNUmber > (SELECT MAX(value) FROM ......) 
Смежные вопросы

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