Cartesian Product Problem

Thread Solved
Reply

Join Date: Mar 2005
Posts: 192
Reputation: stupidenator is an unknown quantity at this point 
Solved Threads: 4
stupidenator's Avatar
stupidenator stupidenator is offline Offline
Junior Poster

Cartesian Product Problem

 
0
  #1
Feb 1st, 2007
Hi everyone,

I am still fairly new to Oracle and SQL. I have two tables with the same information in them. Table1 has the same columns as table2. The differnce between them is the date column. Table1 has 2005 records while table2 has 2006 orders. I am trying to write a SQL statement that will display the contents of these tables across. Meaning, I have all columns from table1 on the left and then immediately right of that, I have the elements from table2. I want it like this so I can look at the 2005 records and the 2006 records going right across the row so that I can compare them. Below is an example of the statement I am trying to use:

  1. SELECT a.DATE,
  2. a.qty,
  3. a.amt,
  4. b.DATE AS Date2
  5. b.qty AS Quantity,
  6. b.amt AS Amount
  7. FROM table1 a, table2 b;

I want to have the result table look like this:

date | qty | amt | date2 | Quantity | Amount

The columns going straight across.


I keep getting warnings that this gives me a cartesian product. Table1 and Table2 each have roughly 50,000 rows in them, so if this is a cartesian join, this is a huge problem. Can anyone help me accomplish this?

Thanks,

Nick
Reply With Quote Quick reply to this message  
Join Date: Oct 2005
Posts: 521
Reputation: pty is on a distinguished road 
Solved Threads: 37
pty's Avatar
pty pty is offline Offline
Posting Pro

Re: Cartesian Product Problem

 
0
  #2
Feb 7th, 2007
Your problem is that you are not specifying a column to join on.

What do the two tables have in common? What is it about a record in table A that means it should be placed next to a record in table B?

Usually on a join you would say something like

select pos.* 
from person per
join posession pos on pos.person_id = per.id
where per.id = 5

By not specifying what to join it links every tuple in table A to every one in table B, so you have A*B tuples returned.

If there is nothing in common between the tables (as I suspect if they are identical) the correct way of displaying the data would be to use a UNION.

  1. SELECT * FROM tableA
  2. UNION
  3. SELECT * FROM tableB

This will give you A+B records back
Note to self... pocket cup
Reply With Quote Quick reply to this message  
Join Date: Mar 2005
Posts: 192
Reputation: stupidenator is an unknown quantity at this point 
Solved Threads: 4
stupidenator's Avatar
stupidenator stupidenator is offline Offline
Junior Poster

Re: Cartesian Product Problem

 
0
  #3
Feb 7th, 2007
Thank you!
I tried joining it on something and it worked!
Again, thank you!
Reply With Quote Quick reply to this message  
Join Date: Feb 2007
Posts: 7
Reputation: g.prabu is an unknown quantity at this point 
Solved Threads: 0
g.prabu g.prabu is offline Offline
Newbie Poster

Prabu:

 
0
  #4
Feb 16th, 2007
how many column can we add in a table ? i mean maximum no of column in a table?
Reply With Quote Quick reply to this message  
Reply

This thread has been marked solved.
Perhaps start a new thread instead?
Message:



Similar Threads
Other Threads in the Oracle Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC