Mark Stosberg wrote:
  >
  >
  >
  >Here's a situation I've run into more than once with SQL:
  >
  >I want to select all the rows in a table that match a criteria, where one
  >of the criteria is possibly having a related entry in a second table. For
  >my example, lets say I have table named 'messages' and another named
  >'message_attachments'. The former has a primary key of msg_id, the latter
  >also contains msg_id, and has an attachment_id as it's primary key.
  >
  >This statement shows me all the messages that also have attachments:
  >
  >SELECT
  >     messages.msg_id,
  >     message_attachments.attachment_id
  >     FROM messages,message_attachments
  >     WHERE messages.msg_id = message_attachments.msg_id;
  >
  >But I want a statement that says: "Show me all the messages, and include
  >information about an attachment if they have one"

SELECT m.msg_id, a.attachment_id
  FROM messages AS m
       LEFT OUTER JOIN message-attachments AS a
         ON m.msg_id = a.msg_id;

This requires 7.1 for the LEFT OUTER JOIN.  In 7.0.3 you could do it
with a UNION.

-- 
Oliver Elphick                                [EMAIL PROTECTED]
Isle of Wight                              http://www.lfix.co.uk/oliver
PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47  6B 7E 39 CC 56 E4 C1 47
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "But seek ye first the kingdom of God, and his  
      righteousness; and all these things shall be added  
      unto you."     Matthew 6:33 



---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://www.postgresql.org/search.mpl

Reply via email to