2010-04-14 125 views
2

当我尝试做select语句,我总是得到以下错误:PostgreSQL的子查询问题

ERROR:由作为表达

只有一个子查询返回多行,如果有只一个结果,它的作品。为什么以及如何解决?

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

回答

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

为什么要有'最高1'? 只有没有它的作品。 – melbic 2010-04-14 20:11:05

+0

@melbic:因为我做了剪切和粘贴错误:-)修复了帖子。 – 2010-04-14 20:25:34

4

说一个整数等于或不等于包含两行的结果集是没有意义的。要做你想做的事,你可以在IN,EXISTS或JOIN之间进行选择。这里是你如何可以用加入做到这一点:

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