On Sep 26, 2012, at 16:28, Alexander Reichstadt <l...@mac.com> wrote:

> Hi,
> 
> I am reading the docu and am looking for an example our explanation as to the 
> difference of setof and arrays.
> 
> But maybe this is not even relevant. The reason I am looking for this is 
> because I need to build a function that looks for all records whose ids are 
> in a pool of other records.
> 
> Maybe this is not making any sense....
> 
> So, here is my function:
> defect_usermessageids "refid_userid" bigint   setof record    sql
> Definition
> 1
> 2
> SELECT DISTINCT messages.id FROM messages
> JOIN message_recipients msgrec ON msgrec.refid_messages=messages.id AND 
> (msgrec.refid_qmusers=$1 OR messages.refid_sender=$1)
> 
> It returns all the IDs of messages of which a given user, the input arg 
> refid_userid, is either a recipient or a sender.
> 
> This works as expected.
> 
> Now I'd like to get the messages for these ids, but it doesn't work.
> 
> It should be something like
> 
> SELECT * FROM messages WHERE ID EXISTS (SELECT defect_usermessageids(2))
> 
> But this doesn't work.
> 
> Please, can someone enlighten me?
> 
> Thanks and regards
> Alex


"SETOF record" is likely not what you want since ID is a single value not a 
"record".

The data type of ID is what you want to return a SETOF of.

You also want to use IN, not EXISTS.  You generally only use EXISTS with a 
correlated sub-query but in this case the sub-query is constant.

David J.

Reply via email to