Запрос, который рассматривает пробелы как имеющие все возможные значения

Запрос, который рассматривает пробелы как имеющие все возможные значения

Предположим, у меня есть следующие таблицы:

Поле_1 Поле_2 Поле_3
А Б Д
А С Э
А С Ф
З Б г
З Б ЧАС
З С я
Поле_1 Поле_2
А С
З Б

Если я перенесу их в окно «Конструктор запросов» в Access и объединю два поля с общими именами, я смогу легко создать запрос, который покажет мне записи «AC» и «ZB» (всего четыре записи).

Вот чего я хочу добиться: предположим, что во второй таблице, во второй записи, Field_2 — Null/Blank. Я хочу найти способ интерпретировать это поле Null каквсевозможные значения (принимая во внимание другие объединения). Прямо сейчас, если я удаляю значение в этом поле и запускаю тот же запрос, я, очевидно, вижу только записи 'A'. Превращение его во внешнее объединение в любом направлении предсказуемо не дает мне желаемого результата.

Другой способ думать об этом, я полагаю, заключается в том, что я хочу, чтобы это работало как фильтр с логикой «и» и «или». Возможно ли/легко ли это сделать в Access? Лучше ли мне попытаться сделать это с помощью расширенного фильтра в Excel?

Этот пример, очевидно, упрощен: в моей отрасли это может быть намного, намного сложнее. Расширенный фильтр будет работать нормально для чего-то небольшого, как это, но моя таблица «неполных данных» (представленная здесь Table_2) может состоять из десятков тысяч записей, а «полный» набор данных, который мне нужно будет использовать для ее расширения, будет состоять из сотен тысяч записей (по крайней мере, если бы я вытащил запрос, который поместил бы все важные данные в табличный формат).

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

решение1

Вам нужно отредактировать свое соединение, предположительно, примерно так:

SELECT Table1.*
FROM Table1 
INNER JOIN Table2 
ON Table2.Field_1 = Table1.Field_1
AND Table2.Field_2 = Table1.Field_2

Что-то вроде этого:

SELECT Table1.*
FROM Table1 
INNER JOIN Table2 
ON Table2.Field_1 = Table1.Field_1
AND IIF(Table2.Field_2 IS NULL,Table1.Field_2,Table2.Field_2) = Table1.Field_2

Извините, если это не совсем верно. Я думаю, что вы не можете использовать COALESCEв Access, и я считаю, что это должно быть IIFвместо этого. К сожалению, я не использовал Access много лет.

В любом случае, принцип в том, что вам нужно отредактировать соединение, чтобы сказать: «Если поле 2 в таблице 2 равно null, то вместо него использовать поле 2 из таблицы 1». Это приведет к сопоставлению каждой строки из Table1.

Связанный контент