May be a trigger can help you, I did following in sql developer:
insert into contact values (12, 'abc');
insert into contact values (13, 'def');
insert into relation values (12, 55);
insert into relation values (13, 55);
insert into grouptab values (55);
Then opened a session in sqlplus
created a trigger
SQL> CREATE OR REPLACE TRIGGER delete_data
2 BEFORE delete
3 ON grouptab
4 REFERENCING NEW AS New OLD AS Old
5 FOR EACH ROW
6 DECLARE
7 BEGIN
delete from contact where contact_uid in (select contact_uid from relation where group_uid = :old.GROUP_uID);
END delete_data;
SQL> select * from contact;
CONTACT_UID CONTACT_NAME
----------- ------------------------------
12 abc
13 def
SQL> select * from relation;
CONTACT_UID GROUP_UID
----------- ----------
12 55
13 55
SQL> select * from grouptab;
GROUP_UID
----------
55
SQL> delete from grouptab;
1 row deleted.
SQL> delete from contact;
0 rows deleted.
Please try following:
delete from relation rel where group_uid in (55) and 1 = (select count(*) from relation where contact_uid = rel.contact_uid);