Access 2019: результаты SQL-запроса, показывающие повторяющиеся записи в результатах формы - PullRequest
0 голосов
/ 28 февраля 2019

Я управляю базой данных, которая используется для организации научных работников и их специальностей.Академики могут иметь более одной специальности, а специальности могут назначаться более чем одному человеку.В соответствующих таблицах хранится информация об академиках (база данных), таблица ключевых слов (ключевые слова) и таблица соединений (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, однако мне пока не повезло.

Ценю любые предложения о возможных решениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...