Как сделать это отношение в MS Access (картинка) - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно подключить id_player из таблицы Players к player_score и player_assist в таблице Goals. Первичный ключ должен ссылаться на эти два.
Есть ли способ, как это сделать?
Access пишет мне «Отношения уже существуют».
Буду благодарен за каждый ответ.

Экран доступа - Доступ
Это правильное решение? - Возможное решение

1 Ответ

0 голосов
/ 07 мая 2018

Для каждой ссылки внешнего ключа, существующей в таблице; Для получения связанных данных необходимо выполнить отдельное соединение с основной / базовой таблицей.

В вашем случае; снова добавьте игроков в свой запрос и присоедините его к Goals.player_assist; присоединяя игроков к Goals.Player_Score.

Почему: одно и то же соединение не может получить обе части данных, так как они представляют разные отношения к таблице игроков.

в SQL это будет выглядеть так:

SELECT G.*
     , PS.id_Player as ScoredByID_Player
     , PS.first_name as ScoredByfName
     , PS.last_name as ScoredBylName
     , PA.id_Player as AssistedByID_Player
     , PA.First_name as AssistedByfName
     , PA.Last_name as AssistedBylName
FROM GOALS G
INNER JOIN Players PS
 on G.id_Player = PS.Player_Score
LEFT JOIN Players PA
 on G.id_Player = PA.Player_Assist

Обратите внимание, что мы используем псевдонимы полей игроков, чтобы мы знали, за кого они играют, а с помощью чего. Мы также используем псевдонимы таблиц для удобочитаемости и потому, что нам нужно копировать «Players» и механизм, чтобы отслеживать, какую таблицу мы имеем в виду; нам нужно, чтобы они были названы по-другому.

Причина, по которой я ЛЕВАЯ присоединяюсь (внешняя) во второй раз, заключается в том, что не все оценки имеют помощь; но у всех есть кто-то, кто их забил. Таким образом, первое объединение с игроками может быть внутренним объединением, но второе объединение может не иметь помощи; и мы все еще можем хотеть видеть детали для всех поставленных целей. Если бы мы заставили 2-го присоединиться к внутреннему, мы потеряли бы все результаты, если помощь не была задействована.

...