Если у всех контрактов есть территория, вы можете просто сделать:
select c.*
from contracts c
where not exists (select 1
from territories t
where t.contract_id = c.contract_id and
t.country <> 'china'
);
Если у вас могут быть контракты без каких-либо территорий, вам нужно проверить, действительно ли он существует:
select c.*
from contracts c
where not exists (select 1
from territories t
where t.contract_id = c.contract_id and
t.country <> 'china'
) and
exists (select 1
from territories t
where t.contract_id = c.contract_id and
t.country = 'china'
);
Если страны повторяются в таблице territories
, то этот метод не требует дополнительной работы по устранению дубликатов в наборе результатов.