Solved

How to write the efficient query to merge two big tables

Posted on 2011-02-17
9
749 Views
Last Modified: 2012-05-11
Have a question to simplify like this:

table T1 (ID number(5), FID number(10) )
table T2  (ID number(5), FID number(10) )
IDs are PK.

T1 contains
ID   FID
10   2
30   5
45   1

T2 contains
ID    FID
5     5
10   3
30   4

Would like to get:
ID  FID
5    5
10  3
30  5
45  1

That is if the records are in T1 but not in T2, take them, vice versa.
If they have the same PK, compare the FID. keep the larger one.
Since the tables are big, the efficiency should be taken into consideration. Is there any Oracle package for it?

Greatly appreciate the guru's tips/codes
0
Comment
Question by:jl66
  • 3
  • 2
  • 2
  • +1
9 Comments
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 250 total points
ID: 34918934
I see 2 options:

select nvl(t1.ID, t2.ID) ID , max(t1.FID, t2.FID) fid
  from table1 t1
  full outer join table2 t2
   on t1.ID = t2.ID 

Open in new window


select ID, FID
  from ( select sq.*, row_number() over ( partition by ID order by FID desc) rn
              from ( select ID, FID from table1 union all select ID, FID from table2 ) sq
        ) q
 where q.RN = 1 

Open in new window

0
 
LVL 76

Assisted Solution

by:slightwv (䄆 Netminder)
slightwv (䄆 Netminder) earned 120 total points
ID: 34918970
I was thinking along the lines of the first one but think it needs some tweaks:


select nvl(t1.ID, t2.ID) ID , greatest(nvl(t1.FID,0), nvl(t2.FID,0)) fid
  from tab1 t1
  full outer join tab2 t2
   on t1.ID = t2.ID  
/
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 34919021
indeed GREATEST and not MAX ...
0
 
LVL 7

Assisted Solution

by:tlovie
tlovie earned 130 total points
ID: 34919265
I actually think something like this would have the best performance... but it would have to be tested.

select ID, MAX(FID) FID
from ( select ID, FID from T1 union all select ID, FID from T2 ) u
group by ID
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 76

Expert Comment

by:slightwv (䄆 Netminder)
ID: 34919529
For what it's worth:  I was trying to set up some more realistic test cases to try performance differences and the code I tweaked from angelIII returns incorrect results if the IDs repeat in the same table.
0
 

Author Comment

by:jl66
ID: 34920910
Thanks so much for the inputs. It is hard for me to select the best sicne everyone got the right answer.
0
 
LVL 7

Expert Comment

by:tlovie
ID: 34921053
I'm curious - you asked for an efficient query - which query works best with your data set?
0
 
LVL 76

Expert Comment

by:slightwv (䄆 Netminder)
ID: 34921483
The explain plans will give you a good estimate of 'better'.

Execution times are important as well.

If you must have a definite 'best' run tkprof stats.  That will decide a winner.

If they all appear equal, feel free to award points to all contributors.
0
 

Author Closing Comment

by:jl66
ID: 34922015
With the 2-million records of test data,
angelIII's 2nd query is the best: 32 unit time
tlovie's:  54
slightwv: 60
But considering easy usage to expand to the real world. The order is different.
Greatly appreciated everyone's tip. It helps a lot.
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Background In several of the companies I have worked for, I noticed that corporate reporting is off loaded from the production database and done mainly on a clone database which needs to be kept up to date daily by various means, be it a logical…
If you find yourself in this situation “I have used SELECT DISTINCT but I’m getting duplicates” then I'm sorry to say you are using the wrong SQL technique as it only does one thing which is: produces whole rows that are unique. If the results you a…
This video shows syntax for various backup options while discussing how the different basic backup types work.  It explains how to take full backups, incremental level 0 backups, incremental level 1 backups in both differential and cumulative mode a…
This video shows how to copy an entire tablespace from one database to another database using Transportable Tablespace functionality.

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now