Запрос для поиска нескольких экземпляров тега 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
Другие вопросы по тегам