Not sure about the effectiveness, but:
select * from table_a where id not in ( select id from table_b union select id from table_c )
If your concern allows the database to continue normal operations while you make the house, you can break it down into several stages:
insert into tblIds select id from table_a union select id from table_b
as many as you need, and then:
delete * from table_a where id not in ( select id from tableIds )
Of course, sometimes processing a large quantity takes a lot of time.
source share