условные критерии в доступе 2003 - PullRequest
0 голосов
/ 26 июня 2018

Я довольно новичок в Access 2003, и у меня возникли некоторые проблемы с тем, что я считаю внутренним соединением. У меня есть две таблицы, которые я не могу редактировать, поэтому я запрашиваю их, и информация в одной из этих двух таблиц относится к профилям пользователей, а вторая - к вспомогательной информации, относящейся к ним, например к адресам электронной почты.

Моя проблема заключается в том, что мне нужно применить критерии к таблице 2 (вспомогательные), но иногда запись не существует, потому что не все таблицы 1 имеют совпадение в таблице 2. Поэтому я решил сохранить все поля таблицы 1 и соответствует только таблице 2, но из-за моих критериев для таблицы 2 я никогда не получу результат, если в таблице 2 не будет значений.

У меня есть поле в таблице 1, которое позволяет мне знать, будут ли значения в таблице 2, так что я хочу сделать что-то вроде if table1val = "1" Then table2val Like "*01*". Пока что это не сработало, вероятно, из-за ошибки с моей стороны, поэтому мне было интересно, возможно ли это в режиме конструктора, потому что при его поиске кажется, что это возможно в представлении SQL, но мне не повезло пытаясь это из-за моего отсутствия знаний SQL.

edit: что у меня было, что работало критерии для таблицы 2:

под примечанием_текст: Like "*help*" Or Like "*HELP*" Or Like "*Help*"

в коде категории: "Emails" Or "Email"

под high_priority_ind: Like "-1"

Все это работает, но ничего не вернет, если в поле отображается # Удалено

поле в таблице1 я хотел бы, чтобы эти критерии основывались на том, когда prod_marker: Not Like "0"

Насколько я понимаю, у вас не может быть if в критерии, потому что, скажем, если вы ставите «1» в качестве критерия для таблицы 1, он действует как table1 = 1, и у вас не может быть table1 = if. Так есть ли лучший способ сделать это, потому что кажется, я не могу иметь

If(Not (prod_marker) Like "0") Then ((high_priority_ind) Like "-1")

Ниже приведен SQL-код, который мне удалось создать, который просто разрушает мой доступ (я не включал SELECT и FROM, потому что он длинный, и я не был уверен, нужно ли это):

WHERE (((dbo_client_link.link_id_txt)=[Enter Policy Number]) AND
 ((dbo_client_link.link_relationship_code)="O" Or 
(dbo_client_link.link_relationship_code)="J") AND 
((dbo_producer.aga_direct_ind)  Like "0") Or 
(((dbo_producer.aga_direct_ind) Like "-1" ) And 
( (dbo_note.note_txt) Like "*help*" Or 
(dbo_note.note_txt) Like "*HELP*") AND 
((dbo_note.category_code)="Emails" Or 
(dbo_note.category_code)="Email") AND 
((dbo_note.high_priority_ind) Like -1)))

1 Ответ

0 голосов
/ 26 июня 2018

Моя проблема в том, что мне нужно применить критерии к таблице 2 (вспомогательные), но иногда запись не существует, потому что не вся таблица 1 имеет совпадение в таблице 2.

Вам нужно использовать левое соединение от Table1 (основное) до Table2 (вспомогательное). Если вы делаете это в режиме конструктора, вы сможете щелкнуть правой кнопкой мыши соединение (строка между двумя таблицами), а затем перейти в Свойства соединения. Вы хотите выбрать Включить все записи из Таблицы1 и только те записи из Таблицы2, где объединенные поля равны

Теперь вы можете использовать выражение Table1.prod_marker <> "0" в качестве критерия (вам не нужен оператор LIKE, так как вы не используете поиск по шаблону). Следуя этим правилам: Какие типы значений находятся в поле prod_marker? Это только «0» и «1», или у вас есть другие возможные значения? Если вы когда-нибудь увидите «0» или «1», вы также можете использовать Table1.prod_marker = 1

Если вы также хотите фильтровать записи на основе значений в Table2, вы можете добавить критерии ИЛИ (например, high_priority_ind = "-1", UCASE(note_txt) like "*HELP*" и UCASE(category_code) like "*EMAIL*"

Примерно так: enter image description here

...