Я пытаюсь сделать полное внешнее соединение из 3 таблиц и пошел логику делать два стола FOJ из hereMS Access - полное внешнее соединение с 3 таблицами
Таким образом, вместо того, чтобы делать UNION на 3 запроса (например, я бы использовал две таблицы), я сделал 7 запросов для объединения. Я уверен, что это действительно неэффективно, но я впервые использую Access.
В принципе, у меня есть таблица с информацией о текущих долларах. Со спецификациями на то, на что они были потрачены (номер ID), кто их предоставил (числовой код), и кто их получил (другой номер кода). Остальные две таблицы имеют аналогичные спецификации, но один показывает, что, как прогнозируется, будет потрачено, а другое из того, что изначально было предусмотрено в бюджете.
Я смог сделать FOJ из двух столов и получить точные цифры, но у меня проблемы с трехсторонним FOJ.
Бывают случаи, когда в фактической таблице для конкретного идентификатора, кода провайдера и кода получателя могут быть потрачены 3 записи долларов, в то время как в таблице «Прогноз» может быть 2, а в таблице бюджета , 1. По сути, нет никакой гарантии, что для каждой комбинации идентификатора номера, кода поставщика, кода получателя в трех таблицах имеется одинаковое количество записей.
Чтобы убедиться, что запись не будет размножаться, я сделал запрос по 3 таблицам отдельно и выполнил функцию Group By. И 7 запросов, которые я сделал, были следующими:
Таблица 1: Фактическое внутреннее соединение ж/Прогноз & внутреннее соединение W/B
Таблица 2: F внутреннее соединение W/B & F влево внешнее соединение с А (где А представляет собой нуль)
Таблица 3: F внутреннее соединение W/A & F левое внешнее соединение W/B (где в нуль)
Таблица 4: Б внутреннее соединение W/A & В левое внешнее соединение ж/F (где F является нулем)
Таблица 5: левое внешнее соединение W/B (где В Нуль) & левое внешнее соединение ж/F (где F является нулем)
Таблица 6: в левое внешнее соединение W/A (где А представляет собой нуль) & в левое внешнее соединение ж/F (где F является нулевым)
Таблица 7: F левое внешнее соединение w/B (где B является нулевым) & F левое внешнее соединение w/A (где A является нулевым)
Может ли кто-нибудь пройти через меня, как сделать 3-столовое полное внешнее соединение? Есть ли какая-то комбинация, которую мне не хватает? К сожалению, я не могу опубликовать таблицы или дать слишком много спецификации, потому что мне не разрешено. Я также не могу изменить сами таблицы, у меня в основном есть только разрешение на чтение.
Просто для пояснения в виде проекции MS Access. Левое внешнее соединение. Влево внешнее соединение C будет выглядеть так: A -> B -> C? К сожалению, еще одно ограничение заключается в том, что на таблицах нет идентификаторов, и я не могу их добавить. Я посмотрю на SQL Server Express, есть ли у них функция Full Outer Join? – user3783314
@ пользователь3783314. , , Он не только поддерживает «полное внешнее соединение», но вы также можете использовать 'union' в подзапросах и поддерживает CTE. Последнее также может быть полезно для этого типа запросов. –
Кроме того, почему вы говорите, что это плохие идеи? Я имею в виду, очевидно, что есть лучшие способы сделать то, что я делаю, но, учитывая ограничения, с которыми я сталкиваюсь, я просто хотел понять, насколько хорошо/плохо решение, которое оно должно делать, что вы предложили (если я могу использовать только Access) – user3783314