Как в PostgreSQL выбрать недостающие значения из таблицы?
Сводка : Сколько экземпляров string a
имеет тип Battle
, которые не имеют типа Activity
, в которых существует множество экземпляров string a
.
См. Изображение ниже. Для запроса, приведенного ниже, я запросил тип Battle
, а затем Activity
, и строки, выделенные красным , перекрываются. Строки, выделенные синим , представляют собой строки для типа Battle
, которые, как мне нужно знать, присутствуют или отсутствуют для типа Activity
.
Вопрос : Итак, как из этого примера вернуть все 6 строк, которых нет для типа Activity
?
![enter image description here](https://i.stack.imgur.com/MpTjt.png)
Вот запрос:
select count(vocab_id), vocab_match, player_response, player_response_target, response_id
from (
select v.id as vocab_id, vocabulary as vocab_match, sq.id as response_id, sq.amatch as response_match, sq.player_response, sq.player_response_target, sq.dialog, sq.dialog_target
from vocabulary_es v
right join (
select trim((regexp_matches(a.player_response_target, '\[t-(.*?)\]', 'g'))[1]) as amatch, a.id, a.player_response, a.player_response_target, a.dialog, a.dialog_target, a.event_type
from (
select drena.event_type, r.id, r.player_response, r.player_response_target, d.dialog, d.dialog_target
from dialogresponses dr
left join responses r on (r.id = dr.response_id)
left join dialogs d on (d.id = dr.dialog_id)
left join dialogresponses_eventsnpcs_all drena on (drena.dialogresponse_id = dr.id)
where dr.locale_id = 1
and dr.response_id IS NOT NULL
and drena.event_type = 'Battle'
) as a
order by a.id asc
) as sq
on (trim(v.vocabulary) ilike trim(sq.amatch))
where v.vocabulary IS NOT NULL
) as final
group by vocab_id, vocab_match, player_response, player_response_target, response_id
order by response_id asc;