Indeed we are missing some information here, but your statement will probably end up like the following :
UPDATE TABLE_2 upd
SET upd.FOO = (SELECT one_column_or_expression FROM TABLE_1 t1, TABLE_2 t2 WHERE <where_clause_subselect>)
WHERE <where_clause_upd>
(upd = alias for table_2, the one that needs to be updated
The questions you should ask yourself are :
1. What are the rows I want to update in TABLE_2. If you want them all to be updated, then you can omit the where clause <where_clause_upd>. Otherwise, you will have to restrict the number of rows with this where clause.
2. Now that Oracle knows what rows in TABLE_2 need to be updated, you will have to tell it what value you want to assign to column FOO. That's where the subselect comes in. The subselect will be evaluated for each row matching <where_clause_upd>. Your subselect needs to return 1 row at the most. If your subselect returns more than 1 row, Oracle will raise an error. If your subselect returns 0 rows, a null value will be assigned to FOO. In the <where_clause_subselect>, you can refer to 3 "sources" of information : t1 (table_1) t2 (table_2 in select) and upd (table_2 that will be updated).
Just give it a try...