Проблема подвыбора в PostgreSQL - PullRequest
2 голосов
/ 15 апреля 2010

Когда я пытаюсь выполнить оператор выбора, я всегда получаю следующую ошибку:

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

Только если есть только один результат, он работает. Почему и как это исправить?

SELECT name from person p where 
id = ( select prs from leader 
where age(leader.lastcourse) > '1 year');

Ответы [ 2 ]

5 голосов
/ 15 апреля 2010

Вы пытаетесь назначить один конкретный идентификатор из выбора, который, кажется, возвращает несколько идентификаторов. Решение OrbMan будет случайным образом получать первый идентификатор из подзапроса. Если вы хотите ВСЕ идентификаторы, которые удовлетворяют условию подзапроса,

SELECT name from person p where  
id IN ( select prs from leader  
where age(leader.lastcourse) > '1 year'); 

Подход Марка использовать JOIN вместо подзапроса также работает.

4 голосов
/ 15 апреля 2010

Нет смысла говорить, что целое число равно или не равно результирующему набору, содержащему две строки. Чтобы сделать то, что вы хотите, вы можете выбрать между IN, EXISTS или JOIN. Вот как вы можете сделать это с помощью объединения:

SELECT name
FROM person p
JOIN leader
ON p.id = leader.prs
where age(leader.lastcourse) > '1 year'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...