Один простой метод использует агрегацию. Предполагая, что в любой таблице нет дубликатов:
select id, name, member, sms_member
from ((select id, name, member, sms_member
from table1
) union all
(select id, name, member, sms_member
from table2
)
) t
group by id, name, member, sms_member
having count(*) = 1;
Тем не менее, ваши примерные данные предполагают, что вы просто хотите строки в table2
, которых нет в table1
. Если это так, я рекомендую not exists
:
select t2.*
from table2 t2
where not exists (select 1
from table1 t1
where t1.id = t2.id and t1.name = t2.name and t1.member = t2.member an t1.sms_member = t2.sms_member
);
Логика должна быть настроена, если значения NULL
возможны в любых столбцах.