Mosh, Tried the codes. Still no luck. The query runs for about 8 to 10 minutes and then the screen shows hundreds of lines of the SQL and no data is updated.
Srimanta ----- Original Message ----- From: "Mosh Teitelbaum" <[EMAIL PROTECTED]> To: "CF-Talk" <[EMAIL PROTECTED]> Sent: Tuesday, October 08, 2002 8:03 PM Subject: RE: Time Required for Updating DB > > Thanks Mosh > > Yup. 8^) > > > I am trying to update price field in Table named Product with values from > > field newprice in Table named New. The primary key in both the tables is > > dealerpart no (Text) which is unique. > > Note: All the records need to be updated > > <CFQUERY name="UpdatePrice" Datasource="XYZ"> > > Select New.newprice,New.dealerpartno,New.publisher, > > Product.publisher,Product.dealerpartno,Product.price > > >From New,Product > > </CFQUERY> > > > > > > <cfloop query="UpdatePrice"> > > Update Product > > SET Product.price= #UpdatePrice.newprice# > > WHERE Product.dealerpartno = #UpdatePrice.dealerpartno# > > > > </cfloop> > > > > Note: There are 20000 records in both the tables. > > Srimanta: > > There are a few problems here. The first is with your SELECT query: > Select > New.newprice, > New.dealerpartno, > New.publisher, > Product.publisher, > Product.dealerpartno, > Product.price > From > New, > Product > > This query (aside from producing two "dealerpartno" columns) does not > specify how to join the two tables. It therefore creates (if I remember the > terminology correctly) a Cartesian Product of the two tables. This is, > essentially, a result set of every single possible combination of the > records from each table. For example, if your 2 tables had the following > data: > New.newPrice Product.price > ============ ============= > a 1 > b 2 > > the result set would be: > newPrice price > ============ ============= > a 1 > a 2 > b 1 > b 2 > > So, since both of your tables have 20,000 records, your SELECT query is > returning a result set with 20,000 x 20,000 records (400,000,000 records). > Looping 400 million times is probably what's taking so long 8^). > > Instead, your query should look something like: > SELECT > New.newprice, > New.dealerpartno AS newDealerPartNo, > New.publisher AS newPublisher, > Product.publisher AS oldPublisher, > Product.dealerpartno AS oldDealerPartNo, > Product.price > FROM > New, > Product > WHERE > New.dealerPartNo = Product.dealerPartNo > > This query will produce a result set with only 20,000 records (assuming > there's a 1-to-1 match of the part numbers in the 2 tables). > > All that said, I don't think you need the join in the SELECT query. It > might be enough to change your code to the following: > > <CFQUERY NAME="UpdatePrice" DATASOURCE="XYZ"> > SELECT > newprice, > dealerpartno > FROM > New > </CFQUERY> > > <CFTRANSACTION> > <CFLOOP QUERY="UpdatePrice"> > UPDATE Product > SET price= #newprice# > WHERE dealerpartno = #dealerpartno# > </CFLOOP> > </CFTRANSACTION> > > -- > Mosh Teitelbaum > evoch, LLC > Tel: (301) 625-9191 > Fax: (301) 933-3651 > Email: [EMAIL PROTECTED] > WWW: http://www.evoch.com/ > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4 Subscription: http://www.houseoffusion.com/index.cfm?sidebar=lists&body=lists/cf_talk FAQ: http://www.thenetprofits.co.uk/coldfusion/faq This list and all House of Fusion resources hosted by CFHosting.com. The place for dependable ColdFusion Hosting.