Мне нужно вернуть все «контакты», которые не отображаются в таблице «делегат» для «имени события», но имеют флажки в таблице «контакты», которые пользователь может выбрать для поиска.
Я знаю, что запрос можно разбить на 2 части.
- Они уже присутствуют на этом мероприятии (отображается ли их электронная почта в таблице «делегатов» с полем Delegates.event, совпадающим с «событием» в пользовательской форме)
WHERE (
d.Event <> [Forms]![usf_FindCampaignContacts]![FCC_EventName]
- Соответствуют ли они критериям (есть ли у них флаг HR в таблице «контакты»)
AND (c.[HR-DEL] = [Forms]![usf_FindCampaignContacts]![FCC_HRD] OR IsNull([Forms]![usf_FindCampaignContacts]![FCC_HRD]));
Основываясь на двух вещах, которые требуются для выполнения запроса, я написал следующий код ...
SELECT
c.[First Name], c.[Last Name], c.Email, d.Event, c.Suppress, c.[HR-DEL]
FROM tbl_Contacts AS c LEFT JOIN tbl_Delegates AS d ON c.Email = d.Email
WHERE (
d.Event <> [Forms]![usf_FindCampaignContacts]![FCC_EventName]
And
c.Suppress = False
)
AND (c.[HR-DEL] = [Forms]![usf_FindCampaignContacts]![FCC_HRD] OR IsNull([Forms]![usf_FindCampaignContacts]![FCC_HRD]));
[FCC_HRD] относится к выбранному пользователем вводу в форме, я пытался использовать <> для удаления совпадающих записей, но я чувствую, что это ошибка компиляции, поэтому я изменил их на операторы и / или операторы и эту часть сейчас возвращает результаты с соответствующими флагами (Успех)
Другая проблема при попытке сделать это таким образом, даже если это сработает, удалит любого, кто был указан в таблице делегатов / спонсоров. Именно поэтому я добавил оператор <> для события, так как ему нужно только удалить их из списка для именованного события. Опять же, это прекрасно работает (Успех)
Последняя проблема заключается в том, что результаты явно извлекаются из таблицы «делегатов», а не из таблицы «контактов», так как обе части работают, но отображают только результаты, которые соответствуют критериям в таблице делегатов, а не из контактов.
Вот отношения запрос / таблица
Вот пользовательская форма (Это не окончательный дизайн)
Ниже приведены 3 таблицы, которые используются в запросе (2 прямые, 1 связанная)
Контакты (в)
+----+------------+---------------+-------------------------+--------+----------+
| ID | First Name | Last Name | Email | HR-DEL | Suppress |
+----+------------+---------------+-------------------------+--------+----------+
| 1 | A | Platt | a.platt@fake.com | TRUE | TRUE |
| 2 | D | Farr | d.farr@fake.com | TRUE | FALSE |
| 3 | Y | Helle | y.helle@fake.com | TRUE | FALSE |
| 4 | S | Oliphant | soliphant@fake.com | TRUE | FALSE |
| 5 | J | Bedell-Pearce | jbedell-pearce@fake.com | TRUE | FALSE |
| 6 | J | Walker | j.walker@fake.com | FALSE | FALSE |
| 7 | S | Rug | s.rug@fake.com | FALSE | FALSE |
| 8 | D | Brown | d.brown@fake.com | FALSE | FALSE |
| 9 | R | Cooper | r.cooper@fake.com | TRUE | FALSE |
| 10 | M | Morrall | m.morrall@fake.com | TRUE | FALSE |
+----+------------+---------------+-------------------------+--------+----------+
Делегаты (д)
+----+-------------------------+-------+
| ID | Email | Event |
+----+-------------------------+-------+
| 1 | a.platt@fake.com | 2 |
| 2 | d.farr@fake.com | 1 |
| 3 | y.helle@fake.com | 4 |
| 4 | soliphant@fake.com | 3 |
| 6 | jbedell-pearce@fake.com | 2 |
+----+-------------------------+-------+
События (не прямые, но используемые для проверки раскрывающегося имени события в форме пользователя и номера события в делегатах)
+----+------------+
| ID | Event Name |
+----+------------+
| 1 | Test 1 |
| 2 | Test 2 |
| 3 | Test 3 |
| 4 | Test 4 |
+----+------------+
На основании выбора формы и данных этого примера мне нужно вернуть следующее:
Все контакты, помеченные как «HR» ИСТИНА, не подавленные или идущие на событие с именем «test 2» (должно быть 5 - я всегда возвращаю имена «делегатов», не посещающих только событие = 3)
Окончательные результаты должны быть:
+----+------------+-----------+--------------------+--------+----------+
| ID | First Name | Last Name | Email | HR-DEL | Suppress |
+----+------------+-----------+--------------------+--------+----------+
| 2 | D | Farr | d.farr@fake.com | TRUE | FALSE |
| 3 | Y | Helle | y.helle@fake.com | TRUE | FALSE |
| 4 | S | Oliphant | soliphant@fake.com | TRUE | FALSE |
| 9 | R | Cooper | r.cooper@fake.com | TRUE | FALSE |
| 10 | M | Morrall | m.morrall@fake.com | TRUE | FALSE |
+----+------------+-----------+--------------------+--------+----------+
В данный момент он, похоже, извлекает результаты из неправильной таблицы (не c). Я попытался изменить тип соединения OUTER, но он вернулся с синтаксической ошибкой FROM.