Full Outer Соедините два запроса из одной таблицы в MS Access

Вопрос: Есть ли другой способ эмулировать полное внешнее объединение в MS Access - НЕ использовать UNION или UNION ALL?

Описание: полное внешнее объединение эмулируется в MS Access с использованием UNION. Однако два запроса, использующих одну и ту же таблицу только с разными фильтрами для формирования набора результатов, не могут быть объединены с помощью UNION, поскольку он просто поместит результаты запроса обратно в один столбец, из которого они были запрошены.

Контекст: данные состоят из ответов от 100 организаций, охватывающих семь лет. Разные организации каждый год, разные ответы на организацию в год, 75% текстовых ответов.

Структура данных: организационная таблица; Таблица вопросов; Таблица ответов; Ссылка Таблица, чтобы связать организации, вопросы, ответы через идентификатор. (Встроенный в SQL Server)

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

Сборка внешнего интерфейса в MS Access.

Кодировка в SQL Server:

SELECT M.ORG_DESC, M.YEAR, M.RESP_DESC, N.ORG_DESC, N.YEAR, N.RESP_DESC
FROM
(SELECT C.RESP_RANK, C.ORG_DESC, A.YEAR, B.RESP_DESC
FROM LINK A
INNER JOIN RESPONSE B
ON A.RESP_ID = B.RESP_ID
INNER JOIN ORG_LOG C
ON A.ORG_ID = C.ORG_ID
WHERE A.QUESTION_ID = 10840) M
FULL OUTER JOIN
(SELECT C.RESP_RANK, C.ORG_DESC, A.YEAR, B.RESP_DESC
FROM LINK A
INNER JOIN RESPONSE B
ON A.RESP_ID = B.RESP_ID
INNER JOIN ORG_LOG C
ON A.ORG_ID = C.ORG_ID
WHERE A.QUESTION_ID = 10850) N
ON M.RESP_RANK = N.RESP_RANK

Результат желал для:

Query1_ORG_DESC  Query1_YEAR   Query1_RESP_DESC   Query2_ORG_DESC   Query2_YEAR   Query2_RESP_DESC
--------------   -----------   ----------------   ---------------   -----------   ----------------
      A            2010               Q                  A               2010        R
    NULL           NULL             NULL                 A               2011        S
      B            2010               T                 NULL             NULL       NULL

Результаты при использовании UNION:

Query1_ORG_DESC  Query1_YEAR   Query1_RESP_DESC
--------------   -----------   ----------------
      A             2010              Q               /*result from Query1*/
      A             2010              R               /*result from Query2*/
      A             2011              S               /*result from Query2*/
      B             2010              T               /*result from Query1*/

1 ответ

Мои извенения

Решение действительно СОЮЗ.

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

Эта ссылка объясняет это адекватно

https://support.office.com/en-ca/article/Join-tables-and-queries-3f5838bd-24a0-4832-9bc1-07061a1478f6

Другие вопросы по тегам