Результаты запроса MS Access - расширение отношений

У меня есть 4 таблицы: A, B, C и связующая таблица. Я хотел бы знать, можно ли получить записи из C, установив критерии в A, где есть запись в таблице связывания, которая связывает A и B, и отдельная запись в таблице связывания для B и C.

Вот упрощенное изображение отношений:

Вот упрощенное изображение отношений

Я попытался настроить запрос, показывающий соответствующие поля из A, B и C, с критериями, установленными в A. Таблица связывания присутствует в запросе. Выполнение запроса возвращает только связанные записи из B. Есть ли что-то, что я должен указать в критериях в связанном поле C? (Я делаю это в режиме дизайна для запроса - мои знания SQL ограничены.)

Отношения.

SQL из Access:

SELECT Fruits.Fruit, Colour.Colour, Pests.Pest
FROM Pests RIGHT JOIN (Fruits RIGHT JOIN (Colour RIGHT JOIN [Linking Table] ON Colour.ID = [Linking Table].Colour) ON Fruits.ID = [Linking Table].Fruit) ON Pests.ID = [Linking Table].Pest
WHERE (((Pests.Pest)="Fly"));

Сырьё: Fly

Выход: Apple

Желаемый результат: яблоко и красный

В таблице связывания есть запись, связывающая ID плода с вредителями, и отдельная запись, связывающая ID плода с цветом.

Любая помощь приветствуется.


person Kevin K    schedule 11.09.2017    source источник
comment
Пожалуйста, предоставьте более подробную информацию. Чтобы помочь мне ответить на ваш вопрос, мне нужны имена столбцов в ваших отношениях, а также запросы SQL, ввод, фактический вывод и желаемый результат.   -  person Erik A    schedule 11.09.2017
comment
Я добавил запрошенные детали. Спасибо.   -  person Kevin K    schedule 12.09.2017


Ответы (1)


Вы используете таблицу ссылок для двух типов ссылок. Это плохая практика (нормализация требует, чтобы все столбцы в таблице были связаны, а вредитель столбца не имеет ничего общего с цветом столбца). Использование одной таблицы для привязки цвета к фруктам и одной таблицы для привязки вредителей к фруктам было бы лучшим планом.

Вы все еще можете использовать это, если хотите, но вам придется дважды присоединиться к таблице связей (один раз для отношения плод - вредители, один раз для отношения плод - цвет).

Попробуйте следующий запрос:

SELECT Fruits.Fruit, Colour.Colour, Pests.Pest
FROM Pests
INNER JOIN [Linking Table] AS LT1 ON Pests.ID = LT1.Pest
INNER JOIN Fruits ON LT1.Fruit = Fruits.ID
INNER JOIN [Linking Table] AS LT2 ON Fruits.ID = LT2.Fruit
INNER JOIN Colour ON LT2.Colour = Colour.ID

Этот запрос переходит от Pest к Linking table to Fruits, затем ко второму экземпляру Linking table, а затем к Color

person Erik A    schedule 12.09.2017
comment
Это сработало, однако в 5-й строке вашего кода у вас есть Fruits.ID = Fruit.ID, где это должно быть Fruits.ID = LT2.Fruit. Спасибо. - person Kevin K; 13.09.2017