Я управляю базой данных, которая используется для организации научных работников и их специальностей.Академики могут иметь более одной специальности, а специальности могут назначаться более чем одному человеку.В соответствующих таблицах хранится информация об академиках (база данных), таблица ключевых слов (ключевые слова) и таблица соединений (KeywordJunctionMk2), которая моделирует вышеуказанное отношение «многие ко многим».Я знаю, что это соглашение об именах не является хорошим, но сейчас это не приоритет.
Я пытаюсь создать расширенный поиск, который позволяет пользователям искать различные критерии из приведенных выше таблиц, включая, но не ограничиваясьИмя, адрес, контактные телефоны и ключевые слова.Важно, чтобы у пользователей была возможность поиска по ключевым словам следующим образом: «Показать записи людей, у которых есть» Ключевое слово 1 И (Ключевое слово 2 ИЛИ Ключевое слово 3).
Проблема в том, что при вводе разных ключевых слов в каждую из этих опций в форме результатов появляются повторяющиеся имена.Например, если я ищу «Авиация», И («Транспорт» ИЛИ «Инженерное дело»), я получаю одного и того же человека дважды, если у них есть все эти ключевые слова.Я хочу, чтобы человек появлялся в поиске только один раз, даже если у него есть несколько связанных записей в таблице Соединения ключевых слов.
Это текущий запрос:
SELECT Database.[Record Type], Database.[Full Name], Database.[Date created],
Database.[Job Title], Database.Notes, Database.[Town/City], Database.[Created
by], Database.Email, Database.Contact_ID, Database.InstitutionLookup,
KeywordJunctionMk2.Keyword_ID, KeywordJunctionMk2_1.Keyword_ID, Database.
[Work phone], Database.Mobile, Database.[Work phone 2]
FROM Keywords
INNER JOIN (Institution INNER JOIN (([Database] INNER JOIN
KeywordJunctionMk2 AS KeywordJunctionMk2_1 ON Database.Contact_ID =
KeywordJunctionMk2_1.Contact_ID) INNER JOIN KeywordJunctionMk2 ON
Database.Contact_ID = KeywordJunctionMk2.Contact_ID) ON Institution.ID =
Database.InstitutionLookup) ON Keywords.Keyword_ID =
KeywordJunctionMk2.Keyword_ID
WHERE (((Database.[Record Type])=IIf([Forms]![New Advanced Search]!
[Contact_Btn]=-1,"Contact",Null)
Or (Database.[Record Type])=IIf([Forms]![New Advanced Search]!
[Expert_Btn]=-1,"Expert",Null)
Or (Database.[Record Type])=IIf([Forms]![New Advanced Search]!
[Journalist_Btn]=-1,"Journalist",Null)
Or (Database.[Record Type])=IIf([Forms]![New Advanced Search]!
[PressOfficer_Btn]=-1,"Press Officer",Null)
Or (Database.[Record Type])=IIf([Forms]![New Advanced Search]!
[IndustryScientist_Btn]=-1,"Industry Scientist",Null)
Or (Database.[Record Type])=IIf([Forms]![New Advanced Search]!
[IndustryPressOfficer_Btn]=-1,"Industry Press Officer",Null)
Or (Database.[Record Type])=IIf([Forms]![New Advanced Search]!
[Scientist_Btn]=-1,"Scientist",Null))
AND ((Database.[Full Name]) Like "*" & [Forms]![New Advanced Search]![Name] &
"*" Or (Database.[Full Name]) Is Null)
AND ((Database.[Date created])>[Forms]![New Advanced Search]![DateCreated] Or
(Database.[Date created]) Is Null)
AND ((Database.[Job Title]) Like "*" & [Forms]![New Advanced Search]!
[JobTitle] & "*" Or (Database.[Job Title]) Is Null)
AND ((Database.Notes) Like "*" & [Forms]![New Advanced Search]![Notes] &
"*"Or (Database.Notes) Is Null)
AND ((Database.[Town/City]) Like "*" & [Forms]![New Advanced Search]!
[Location] & "*" Or (Database.[Town/City]) Is Null)
AND ((Database.[Created by]) Like "*" & [Forms]![New Advanced Search]!
[CreatedBy] & "*" Or (Database.[Created by]) Is Null)
AND ((Database.Email) Like "*" & [Forms]![New Advanced Search]![Email] & "*"
Or (Database.Email) Is Null)
AND ((Database.InstitutionLookup) Like "*" & [Forms]![New Advanced Search]!
[Institution] & "*" Or (Database.InstitutionLookup) Is Null)
AND ((KeywordJunctionMk2.Keyword_ID)=[Forms]![New Advanced Search]!
[Keywords1] Or (KeywordJunctionMk2.Keyword_ID) Is Null)
AND ((KeywordJunctionMk2_1.Keyword_ID)=[Forms]![New Advanced Search]!
[Keywords2] Or (KeywordJunctionMk2_1.Keyword_ID) Is Null Or
((KeywordJunctionMk2_1.Keyword_ID)=[Forms]![New Advanced Search]![Keywords3]
Or (KeywordJunctionMk2_1.Keyword_ID) Is Null))
AND ((Database.[Work phone]) Like "*" & [Forms]![New Advanced Search]!
[WorkNumber] & "*" Or (Database.[Work phone]) Is Null)
AND ((Database.Mobile) Like "*" & [Forms]![New Advanced Search]![Mobile] &
"*" Or (Database.Mobile) Is Null)
AND ((Database.[Work phone 2]) Like "*" & [Forms]![New Advanced Search]!
[WorkNumber] & "*" Or (Database.[Work phone 2]) Is Null))
ORDER BY Database.[Record Type] DESC;
Я выделил соответствующую часть предложения WHERE, которая касается ключевых слов, так как это часть, с которой я сталкиваюсь.
Я проверил это, создав запрос только с полями Keyword, и проблема там повторяется.Я также пытался использовать запрос UNION и SELECT DISTINCT, однако я все еще получаю повторяющиеся имена.Другое решение, которое я изучаю, - это комбинация соединений LEFT / RIGHT, однако мне пока не повезло.
Ценю любые предложения о возможных решениях.