Запрос для поиска нескольких экземпляров тега MARC (SQL)
Я пытаюсь выполнить запрос, который будет искать в базе данных библиографических записей и выводить все записи, которые имеют более одного тега 020 в соответствии с некоторыми заданными параметрами.
Примечание: параметры являются гибкими. Важной частью является поиск записей с двумя или более тегами 020.
Вот что у меня есть:
select b.bib#, b.text, t.processed, i.call, i.collection, i.creation_date
from bib b, title t, item i
where b.bib# = t.bib# and t.bib# = i.bib#
and b.tag = '020'
and i.collection in ('PIC', 'E')
order by i.creation_date DESC, i.collection
Это будет отображать каждый 020 и сопровождающий текст, но я хочу, чтобы он отображал только записи с двумя или более 020. Группа по нагруднику # может быть?
1 ответ
Решение
Я не уверен в точном синтаксисе, который вам понадобится, но вы можете использовать подзапрос:
select b.bib#
from bib b
where b.tag = '020'
group by b.bib#
HAVING COUNT(*) > 1
Чтобы идентифицировать нагрудник с несколькими записями "020", либо присоединитесь к нему, либо используйте критерии WHERE с IN, как:
select b.bib#, b.text, t.processed, i.call, i.collection, i.creation_date
from bib b, title t, item i
where b.bib# = t.bib# and t.bib# = i.bib#
and b.tag = '020'
and i.collection in ('PIC', 'E')
and b.bib# IN (select b.bib#
from bib b
where b.tag = '020'
group by b.bib#
HAVING COUNT(*) > 1)
order by i.creation_date DESC, i.collection