web-dev-qa-db-fra.com

Joignez deux tables en fonction de la relation définie dans la troisième table

J'ai deux tables Activité et Action. Une ou plusieurs actions peuvent être effectuées pour une activité. Et les relations entre l'activité et l'action sont données dans un troisième tableau intitulé Action Action.

Comment puis-je récupérer un ensemble de résultats qui m'indique quelle action est applicable pour chaque activité à l'aide d'une instruction SQL? Voici la structure de la table

Table d'activités -ActivityId (PK), ActivityText

Tableau d'actions - ActionId (PK), ActionText

ActivityAction -ActivityActionId (PK), ActivityID, ActionID

Je veux une table résultante au format

Activité, action applicable

(la colonne Activité doit montrer ActivityText et l'action applicable doit montrer ActionText)

pourriez-vous me guider?

Je vous remercie.

36
user176687

Cela devrait faire l'affaire

SELECT Activity.ActivityText as Activity, Action.ActionText as ApplicableAction
FROM ActivityAction
    INNER JOIN Activity
        ON ActivityAction.ActivityId = Activity.ActivityId
    INNER JOIN Action 
        ON ActivityAction.ActionId = Action.ActionId

Vous devriez lire sur JOINS dans les bases de données. Voici un bon point de départ:

http://en.wikipedia.org/wiki/Join_%28SQL%29

Fondamentalement, ce que nous avons ici est une relation plusieurs à plusieurs entre l'activité et l'action qui est résolue par deux relations un à plusieurs à l'aide d'une table de jointure appelée ActivityAction.

Pour récupérer les données requises, nous joignons ActivityAction à chacune des tables à l'aide des colonnes PK et FK appropriées, puis choisissons les colonnes de chaîne dans SELECT

49
Raj More
SELECT ActivityText, ActionText
FROM Activity
JOIN ActivityAction ON Activity.ActivityId = ActivityAction.ActivityId
JOIN Action ON ActivityAction.ActionId = Action.ActionId
WHERE Activity.ActivityId = 1;
3
mopoke
SELECT ActivityText AS Activity, ActionText AS ApplicableAction
  FROM Activity 
  JOIN ActivityAction on Activity.ActivityId = ActivityAction.ActivityID
  JOIN Action on Action.ActionId = ActivityAction.ActionID

Vous avez des ID dans la table Action et lorsque vous rejoignez la table ActivityAction sur la clé ActivityId, vous pouvez rejoindre la table d'activité

0
Gaim