Это будет длинный вопрос, поэтому я постараюсь объяснить его как можно лучше.
Я разработал простой инструмент отчетности, в котором хранится ряд результатов и с учетом идентификатора отчета, эти результаты были получены из конкретной цитаты, используемой в основной системе, с огромным списком их, хранящихся в таблица котировок. Вот текущая партия:
ДОКЛАДЫ
REP_ID DESC QUOTE_ID
-----------------------------------
1 Test 1
2 Today 1
3 Last Week 2
РЕЗУЛЬТАТЫ
RES_ID TITLE REFERENCE REP_ID
---------------------------------------------------
1 Equipment Toby 1
2 Inventory Carl 1
3 Stocks Guest 2
4 Portfolios Guest 3
QUOTE
QUOTE_ID QUOTE
------------------------------------
1 Booking a meeting room
2 Car Park Policy
3 New User Guide
Пока все хорошо, простая хранимая процедура смогла извлечь всю необходимую информацию.
Теперь список функций был расширен, чтобы включить категории и группы цитат. В Отчеты таблица quote_id была изменена на group_id для ссылки на следующие таблицы.
REPORTS
- REPORT_ID
- DESC
- GROUP_ID
GROUP
- GROUP_ID
- GROUP
GROUP_CAT_JOIN
- GCJ_ID
- CAT_ID
- GROUP_ID
CATEGORIES
- CAT_ID
- CATEGORY
CAT_QUOTE_JOIN
- CQJ_ID
- CAT_ID
- QUOTE_ID
Идея этих изменений заключается в том, что вместо того, чтобы составлять отчет по цитате, я теперь должен написать отчет для группы, где группа представляет собой набор цитат для определенных случаев. Я также должен иметь возможность запустить отчет по категории, где категория также является набором цитат для определенных отделов. Хитрость в том, что в одну группу могут попасть несколько категорий.
Чтобы объяснить это далее, таблица результатов имеет report_id, который ссылается на отчеты, отчеты имеют group_id, который связывает группы, группы и категории, связанные через таблицу group_cat_join, то же самое с категориями и кавычками через таблицу cat_quote_join.
В основных терминах я должен быть в состоянии извлечь все результаты из группы цитат или категории цитат. Целью запроса будет получение всех результатов из определенного отчета в определенной категории, группе или обоих. Эта головоломка уже несколько дней ставит меня в тупик, поскольку внутренние объединения, похоже, не работают, и я изо всех сил пытаюсь найти другие способы решения проблемы с помощью SQL.
Может кто-нибудь здесь помочь мне?
Вот некоторые дополнительные разъяснения.
Я хочу иметь возможность возвращать все результаты в категории, но на данный момент решение ниже и те, которые я пробовал, всегда выводят каждое решение в описании, а это не то, что мне нужно.
Вот пример данных, которые у меня есть на данный момент
Результаты
RES_ID TITLE REFERENCE REP_ID
---------------------------------------------------
1 Equipment Toby 1
2 Inventory Carl 1
3 Stocks Guest 2
4 Portfolios Guest 3
Отчеты
REP_ID DESC GROUP_ID
-----------------------------------
1 Test 1
2 Today 1
3 Last Week 2
GROUP
GROUP_ID GROUP
---------------------------------
1 Standard
2 Target Week
GROUP_CAT_JOIN
GCJ_ID GROUP_ID CAT_ID
----------------------------------
1 1 1
2 1 2
3 2 3
КАТЕГОРИЯ
CAT_ID CAT
-------------------------------
1 York Office
2 Glasgow Office
3 Aberdeen Office
CAT_QUOTE_JOIN
CQJ_ID CAT_ID QUOTE_ID
-----------------------------------
1 1 1
2 2 2
3 3 3
QUOTE
QUOTE_ID QUOTE
------------------------------------
1 Booking a meeting room
2 Car Park Policy
3 New User Guide
Это тестовые данные, которые я использую в данный момент, и, насколько мне известно, это похоже на то, что будет проходить после того, как это будет сделано. Честно говоря, я все еще пытаюсь обойти эту структуру.
Результат, который я ищу, - если я выберу поиск по группе, я получу все внутри группы, если я выберу все внутри категории, я получу все только внутри этой категории, и если я выберу что-то из категории в группа, я получаю все внутри этой категории. Проблема на данный момент заключается в том, что всякий раз, когда на группу ссылаются, все внутри каждой категории, которая связана с группой, вытягивается.