Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Can you check for data in one table or another but not both in one query?

userLynxJun 20 2013 — edited Jun 20 2013

I have a situation where I need to link two tables together but the data may be in another (archive) table or different records are in both but I want the latest record from either table:

ACCOUNT

AccountID     Name   

123               John Doe

124               Jane Donaldson           

125               Harold Douglas    

MARKETER_ACCOUNT

Key     AccountID     Marketer    StartDate     EndDate

1001     123               10526          8/3/2008     9/27/2009

1017     123               10987          9/28/2009     12/31/4712    (high date ~ which means currently with this marketer)

1023     124               10541          12/03/2010     12/31/4712

ARCHIVE

Key     AccountID     Marketer    StartDate     EndDate

1015     124               10526          8/3/2008     12/02/2010

1033     125               10987         01/01/2011     01/31/2012  

So my query needs to return the following:

123     John Doe                        10526     8/3/2008     9/27/2009

124     Jane Donaldson             10541     12/03/2010     12/31/4712     (this is the later of the two records for this account between archive and marketer_account tables)

125     Harold Douglas               10987          01/01/2011     01/31/2012     (he is only in archive, so get this record)

I'm unsure how to proceed in one query.  Note that I am reading in possibly multiple accounts at a time and returning a collection back to .net

open CURSOR_ACCT

          select AccountID

          from

                 ACCOUNT A,

                 MARKETER_ACCOUNT M,

                 ARCHIVE R

           where A.AccountID = nvl((select max(M.EndDate) from Marketer_account M2

                                                where M2.AccountID = A.AccountID),

                                                  (select max(R.EndDate) from Archive R2

                                                where R2.AccountID = A.AccountID)

               and upper(A.Name) like parameter || '%'

<can you do a NVL like this?   probably not...   I want to be able to get the MAX record for that account off the MarketerACcount table OR the max record for that account off the Archive table, but not both>

(parameter could be "DO", so I return all names starting with DO...)

This post has been answered by Frank Kulash on Jun 20 2013
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jul 18 2013
Added on Jun 20 2013
5 comments
491 views