<p>I have two tables: a source table and a target table.  The target table will have a subset of the columns of the source table.  I need to update a single column in the target table by joining with the source table based on another column.  The update statement is as follows:</p>

<pre><code>UPDATE target_table tt
SET special_id = ( SELECT source_special_id
                   FROM source_table st
                   WHERE tt.another_id = st.another_id )
</code></pre>

<p>For some reason, this statement seems to run indefinitely.  The inner select happens almost immediately when executed by itself.  The table has roughly 50,000 records and its hosted on a powerful machine (resources are not an issue).  </p>

<p>Am I doing this correctly?  Any reasons the above wouldn't work in a timely manner?  Any better way to do this?</p>

Update:
Ok, now that the query has been fixed -- I've done this exact thing many times, on unindexed tables well over 50K rows, and it worked fine in Oracle 10g and 9i.  So something else is going on here; yes, you are calling for nested loops, but no, it shouldn't run forever, even so.  What are the  primary keys on these tables? Do you by any chance have multiple rows from the second table matching the same row for the first table?  You could be trying to rewrite the whole table over and over, throwing the locking system into a fit.
Original Response
That statement doesn't really make sense -- you are telling it to update all the rows where ids match, to the same id (meaning, no change happens!).
I imagine the real statement looks a bit different?
Please also provide table schema information (primary keys for the 2 tables, any available indexes, etc).