I think you can achieve this by statement trigger, something like this should serve the purpose. Of course, you should start from a cleaning point, it means first you need to update all the values in the user table with the latest status of the user_work table.
I believe as well that @Littlefoot statement is correct, keeping the same field in two tables is never a good idea.
What I give you here is a solution to maintain the status in your user table using changes or new entries in the user_work table. I think it is what you asked for.
Let's imagine this scenario ( I used different names for the tables )
SQL> create table user_names ( user_id number, username varchar2(1) , status varchar2(1) ) ;
Table created.
SQL> insert into user_names values ( 1 , 'A' , 1 );
1 row created.
SQL> insert into user_names values ( 2 , 'B' , 1 );
1 row created.
SQL> create table user_work ( user_work_id number, user_id number, status varchar2(1) ) ;
Table created.
In this scenario, I have no rows yet in the user_work table, so let's create the statement trigger to update or insert
SQL> create or replace trigger upd_status_user
after insert or update on user_work
begin
merge into user_names t
using ( select * from user_work ) s
on ( t.user_id = s.user_id )
when matched then
update set t.status = s.status
where
s.user_work_id = ( select max(user_work_id) from user_work s where t.user_id = s.user_id ) ;
end;
/
Trigger created.
SQL>
Now we test it
SQL> insert into user_work values ( 100 , 1 , 1 );
1 row created.
SQL> commit ;
Commit complete.
SQL> select * from user_names ;
USER_ID U S
---------- - -
1 A 1
2 B 1
SQL> insert into user_work values ( 101 , 1 , 0 );
1 row created.
SQL> commit ;
Commit complete.
SQL> select * from user_names ;
USER_ID U S
---------- - -
1 A 0
2 B 1
SQL> insert into user_work values ( 102 , 1 , 1 ) ;
1 row created.
SQL> commit ;
Commit complete.
SQL> select * from user_names ;
USER_ID U S
---------- - -
1 A 1
2 B 1
You can see the changes in user_names table ( your user table ) when I am inserting new records in the user_work table , maintaining the latest status.
If I update, it happens the same
SQL> update user_work set status = 0 where user_work_id=102 ;
1 row updated.
SQL> commit ;
Commit complete.
SQL> select * from user_names ;
USER_ID U S
---------- - -
1 A 0
2 B 1