Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Updating a table from another - how to avoid a correlated subquery
Hi,
Thanks to all that answered a previous question I posted. Now I've got another puzzle...
Being a DB2, MS-Access, and SAS SQL man and given an assignment to update a table from another in Oracle7, I naturally wrote an update query like this:
UPDATE NEWDATA INNER JOIN PHONECALLS
ON NEWDATA.duration_seconds = PHONECALLS.duration_seconds AND NEWDATA.duration_minutes = PHONECALLS.duration_minutes AND NEWDATA.destination_number = PHONECALLS.deatination_number AND NEWDATA.origin_number = PHONECALLS.origin_number AND NEWDATA.call_date = PHONECALLS.call_date AND NEWDATA.person_id = PHONECALLS.person_id SET PHONECALLS.posted_date = NEWDATA.posted_date PHONECALLS.amount = NEWDATA.amount ;
However, I discovered to my dismay that Oracle doesn't have an INNER JOIN clause in its syntax set. So I researched for an Oracle7-accecptable way of doing the same trick. Adapting Joe Celko's "SQL for Smarties", page 124, to my problem I get:
UPDATE PHONECALLS
SET posted_date =
( SELECT a.posted_date FROM NEWDATA a WHERE a.duration_seconds = PHONECALLS.duration_seconds AND a.duration_minutes = PHONECALLS.duration_minutes AND a.destination_number = PHONECALLS.deatination_number AND a.origin_number = PHONECALLS.origin_number AND a.call_date = PHONECALLS.call_date AND a.person_id = PHONECALLS.person_id ) , amount = ( SELECT b.amount FROM NEWDATA b WHERE b.duration_seconds = PHONECALLS.duration_seconds AND b.duration_minutes = PHONECALLS.duration_minutes AND b.destination_number = PHONECALLS.deatination_number AND b.origin_number = PHONECALLS.origin_number AND b.call_date = PHONECALLS.call_date AND b.person_id = PHONECALLS.person_id ) ;
This leaves me with a big problem. I ended up with two correlated subqueries which I know will grind our machine to a halt. Can someone please provide a suggestion how I can update two or more columns from one table to another without the need to do it through correlated subqueries as shown above?
Again thanking all in advance,
Boyce G. Williams, Jr.
Boyce G. Williams, Jr.
.--------------------------------------------------------------------.Received on Thu Mar 18 1999 - 09:55:09 CST
| "People should have two virtues: purpose- the courage to envisage |
| and pursue valued goals uninhibited by the defeat of infantile |
| fantasies, by guilt and the failing fear punishment; and wisdom- a|
| detached concern with life itself, in the face of death itself." |
| Norman F. Dixon|
'--------------------------------------------------------------------'
![]() |
![]() |