2010-04-14 118 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'