Мне кажется, я знаю, откуда ты.Я бы предпочел писать одинаковые объединения таким образом, чтобы держать пункты ON
рядом с предложениями JOIN
для простоты чтения и, следовательно, обслуживания, например:
FROM
tempMapIDs
INNER JOIN qryOptionsMap
ON tempMapIDs.NewDate = qryOptionsMap.RenewalDate
AND tempMapIDs.NewPlanOption = qryOptionsMap.PlanOption
INNER JOIN BenefitMapRiders AS RxDeduct
ON tempMapIDs.MapID = RxDeduct.MapID
AND tempMapIDs.RxDeduct = RxDeduct.OldRiderOption
AND RxDeduct.NewRiderOption = qryOptionsMap.RxDeduct
INNER JOIN BenefitMapRiders AS SubAbuse
ON tempMapIDs.MapID = SubAbuse.MapID
AND tempMapIDs.SubAbuse = SubAbuse.OldRiderOption
AND SubAbuse.NewRiderOption = qryOptionsMap.SubAbuse
INNER JOIN BenefitMapRiders AS Infertility
ON tempMapIDs.MapID = Infertility.MapID
AND tempMapIDs.Infertility = Infertility.OldRiderOption
AND Infertility.NewRiderOption = qryOptionsMap.Infertility
INNER JOIN BenefitMapRiders AS Dental
ON tempMapIDs.MapID = Dental.MapID
AND tempMapIDs.Dental = Dental.OldRiderOption
AND Dental.NewRiderOption = qryOptionsMap.Dental
INNER JOIN BenefitMapRiders AS Chiro
ON tempMapIDs.MapID = Chiro.MapID
AND tempMapIDs.Chiro = Chiro.OldRiderOption
AND Chiro.NewRiderOption = qryOptionsMap.Chiro
INNER JOIN BenefitMapRiders AS Vision
ON tempMapIDs.MapID = Vision.MapID
AND tempMapIDs.Vision = Vision.OldRiderOption
AND Vision.NewRiderOption = qryOptionsMap.Vision
INNER JOIN BenefitMapRiders AS Drug
ON tempMapIDs.MapID = Drug.MapID
AND tempMapIDs.Drug = Drug.OldRiderOption
AND Drug.NewRiderOption = qryOptionsMap.Drug
Обратите внимание, что вышеуказанные объединенияне вложенный, поэтому оптимизатор может оценивать их в любом порядке, в котором сочтет нужным.
Однако приведенный выше код не является допустимым синтаксисом Access (ACE, Jet и т. д.) (к сожалению, он не поддерживает SQLСтандарт).Скорее, это заставляет вас помещать каждое соединение в скобки.Лично я бы оставил объединения в приведенной выше структуре и добавил бы скобки таким образом, чтобы они были как можно более незаметными, например
FROM (((((((
tempMapIDs
INNER JOIN qryOptionsMap
ON tempMapIDs.NewDate = qryOptionsMap.RenewalDate
AND tempMapIDs.NewPlanOption = qryOptionsMap.PlanOption
)
INNER JOIN BenefitMapRiders AS RxDeduct
ON tempMapIDs.MapID = RxDeduct.MapID
AND tempMapIDs.RxDeduct = RxDeduct.OldRiderOption
AND RxDeduct.NewRiderOption = qryOptionsMap.RxDeduct
)
INNER JOIN BenefitMapRiders AS SubAbuse
ON tempMapIDs.MapID = SubAbuse.MapID
AND tempMapIDs.SubAbuse = SubAbuse.OldRiderOption
AND SubAbuse.NewRiderOption = qryOptionsMap.SubAbuse
)
INNER JOIN BenefitMapRiders AS Infertility
ON tempMapIDs.MapID = Infertility.MapID
AND tempMapIDs.Infertility = Infertility.OldRiderOption
AND Infertility.NewRiderOption = qryOptionsMap.Infertility
)
INNER JOIN BenefitMapRiders AS Dental
ON tempMapIDs.MapID = Dental.MapID
AND tempMapIDs.Dental = Dental.OldRiderOption
AND Dental.NewRiderOption = qryOptionsMap.Dental
)
INNER JOIN BenefitMapRiders AS Chiro
ON tempMapIDs.MapID = Chiro.MapID
AND tempMapIDs.Chiro = Chiro.OldRiderOption
AND Chiro.NewRiderOption = qryOptionsMap.Chiro
)
INNER JOIN BenefitMapRiders AS Vision
ON tempMapIDs.MapID = Vision.MapID
AND tempMapIDs.Vision = Vision.OldRiderOption
AND Vision.NewRiderOption = qryOptionsMap.Vision
)
INNER JOIN BenefitMapRiders AS Drug
ON tempMapIDs.MapID = Drug.MapID
AND tempMapIDs.Drug = Drug.OldRiderOption
AND Drug.NewRiderOption = qryOptionsMap.Drug
Обратите внимание, что приведенное выше просто дает внешний вид вложенногоприсоединяется, но в действительности оптимизатор по-прежнему может оценивать их в любом порядке (это приводит к потере функциональности - невозможно указать явный порядок - но это доступ для вас!)