Предположим, у меня есть следующие таблицы:
Поле_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.