> 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
Signup for the Fusion Authority news alert and keep up with the latest news in 
ColdFusion and related topics. http://www.fusionauthority.com/signup.cfm

Reply via email to