PostgreSQL子选择问题

时间:2010-04-14 20:03:21

标签: database postgresql

当我尝试执行select语句时,我总是收到以下错误:

错误:用作表达式的子查询返回的多行

只有只有一个结果才有效。为什么以及如何修复?

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

2 个答案:

答案 0 :(得分:5)

您正尝试从似乎正在返回多个ID的选择中分配一个特定ID。 OrbMan的解决方案将从子查询中随机获取第一个ID。如果您想要满足子查询条件的所有ID,

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

Mark使用JOIN而不是子查询的方法也有效。

答案 1 :(得分:4)

说一个整数等于或不等于包含两行的结果集是没有意义的。要做你想做的事,你可以选择IN,EXISTS或JOIN。以下是如何通过加入来实现的:

SELECT name
FROM person p
JOIN leader
ON p.id = leader.prs
where age(leader.lastcourse) > '1 year'