2010-03-10 2 views
0

я не понимаю проблемы с возвратом несколько строк:помощь с подзапросом! возвращает более 1 строки

вот мой стол BBC:

name region area population gdp 
Afghanistan South Asia 652225 26000000  
Albania Europe 28728 3200000 6656000000 
Algeria Middle East 2400000 32900000 75012000000 
Andorra Europe 468 64000 
Angola Africa 1250000 14500000 14935000000 
etc............................. 

вопрос:

Список имя и регион стран в регионах, содержащих «Индию», «Иран».

это мое утверждение:

select name from bbc where region = (select region from bbc where name='India' or name='Iran') 

возвращается:

sql: errorSubquery returns more than 1 row 

, что случилось с моим утверждением? ответ должен быть выполнен в виде отборочного оператора в выбранном заявлении

спасибо!

ответ

6

Это потому, что вы пытаетесь сравнить region с таблицей значений. Вместо этого попробуйте использовать in:

select name 
from bbc 
where region in 
    (select region from bbc where name='India' or name='Iran') 
3

Вы можете иметь немного другой синтаксис, и он будет работать:

SELECT name 
FROM bbc 
WHERE region IN 
(
    SELECT region FROM bbc WHERE name='India' OR name='Iran' 
) 

Единственное различие в том, что вместо равных (=), мы используем IN.

Причина, по которой ваша предыдущая неудача состояла в том, что для использования equals вы сравниваете одно значение с другим значением. То, что вы случайно делали, - это сравнение одного значения с несколькими значениями («SubQuery возвращает более одной строки»). Изменение здесь говорит о том, где region находится в результатах, возвращаемых из подзапроса.

1

выберите имя, регион от bbc, где область IN (выберите регион из bbc, где название IN ('India', 'Iran'))

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