42 Stimmen

Verbindung zweier Tabellen auf der Grundlage einer in der dritten Tabelle definierten Beziehung

Ich habe zwei Tabellen Aktivität und Aktion. Für eine Aktivität können eine oder mehrere Aktionen durchgeführt werden. Die Beziehungen zwischen Aktivität und Aktion werden in einer dritten Tabelle mit dem Namen Aktivität-Aktion angegeben.

Wie kann ich mit einer SQL-Anweisung eine Ergebnismenge abrufen, die mir sagt, welche Aktion für jede Aktivität anwendbar ist? Hier ist die Tabellenstruktur

Aktivitätstabelle -ActivityId(PK), ActivityText

Aktionstabelle - ActionId(PK), ActionText

AktivitätAktion -ActivityActionId(PK), ActivityID, ActionID

Ich möchte eine Ergebnistabelle in folgendem Format

Aktivität, Anwendbare Aktion

(in der Spalte Aktivität sollte ActivityText und in der Spalte Anwendbare Aktion sollte ActionText stehen)

Könnten Sie mich bitte anleiten?

Ich danke Ihnen.

62voto

Raj More Punkte 45539

So sollte es klappen

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

Sie sollten sich über JOINS in Datenbanken informieren. Hier ist ein guter Ausgangspunkt:

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

Im Grunde genommen haben wir es hier mit einer Viele-zu-Viele-Beziehung zwischen Aktivität und Aktion zu tun, die durch zwei Eins-zu-Viele-Beziehungen unter Verwendung einer Join-Tabelle namens ActivityAction aufgelöst wird.

Um die erforderlichen Daten zurückzubekommen, verbinden wir ActivityAction mit jeder der Tabellen unter Verwendung der entsprechenden PK- und FK-Spalten und wählen dann die String-Spalten in der SELECT

4voto

mopoke Punkte 10307
SELECT ActivityText, ActionText
FROM Activity
JOIN ActivityAction ON Activity.ActivityId = ActivityAction.ActivityId
JOIN Action ON ActivityAction.ActionId = Action.ActionId
WHERE Activity.ActivityId = 1;

0voto

Gaim Punkte 6499
SELECT ActivityText AS Activity, ActionText AS ApplicableAction
  FROM Activity 
  JOIN ActivityAction on Activity.ActivityId = ActivityAction.ActivityID
  JOIN Action on Action.ActionId = ActivityAction.ActionID

Sie haben IDs in der Tabelle "Action", und wenn Sie die Tabelle "ActivityAction" mit dem Schlüssel "ActivityId" verknüpfen, können Sie der Tabelle "Activity" beitreten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X