Gewusst wie: Manuelles Erstellen von Selbstverknüpfungen

Aktualisiert: November 2007

Sie können eine Tabelle mit sich selbst verknüpfen, selbst wenn die Tabelle über keine reflexive Beziehung in der Datenbank verfügt. Mit einer Selbstverknüpfung können Sie z. B. nach Paaren von Autoren suchen, die in derselben Stadt leben.

Wie bei jeder Verknüpfung werden für eine Selbstverknüpfung mindestens zwei Tabellen benötigt. Der Unterschied besteht darin, dass Sie der Abfrage keine zweite Tabelle, sondern eine zweite Instanz derselben Tabelle hinzufügen. Auf diese Weise können Sie eine Spalte in der ersten Instanz der Tabelle mit derselben Spalte in der zweiten Instanz vergleichen, wodurch Sie die Werte einer Spalte miteinander vergleichen können. Der Abfrage- und Ansicht-Designer weist der zweiten Instanz der Tabelle einen Alias zu.

Wenn Sie z. B. eine Selbstverknüpfung zum Suchen aller Autorenpaare in Berkeley erstellen, vergleichen Sie die Spalte city in der ersten Instanz der Tabelle mit der Spalte city in der zweiten Instanz. Die entsprechende Abfrage könnte folgendermaßen aussehen:

   SELECT 
         authors.au_fname, 
         authors.au_lname, 
         authors1.au_fname AS Expr2, 
         authors1.au_lname AS Expr3
      FROM 
         authors 
            INNER JOIN
            authors authors1 
               ON authors.city 
                = authors1.city
      WHERE
         authors.city = 'Berkeley'

Das Erstellen einer Selbstverknüpfung erfordert oft mehrere Verknüpfungsbedingungen. Die Gründe dafür werden aus dem Ergebnis der vorherigen Abfrage ersichtlich:

   Cheryl Carson       Cheryl Carson
   Abraham Bennet      Abraham Bennet
   Cheryl Carson       Abraham Bennet
   Abraham Bennet      Cheryl Carson

Die erste Zeile ist ohne Belang; sie gibt an, dass Cheryl Carson in derselben Stadt wie Cheryl Carson lebt. Die zweite Zeile wird ebenfalls nicht benötigt. Um diese überflüssigen Daten auszuschließen, fügen Sie eine weitere Bedingung hinzu, durch die nur die Ergebniszeilen beibehalten werden, in denen die Autorennamen verschiedene Autoren bezeichnen. Die entsprechende Abfrage könnte folgendermaßen aussehen:

   SELECT 
         authors.au_fname, 
         authors.au_lname, 
         authors1.au_fname AS Expr2, 
         authors1.au_lname AS Expr3
      FROM 
         authors 
            INNER JOIN
            authors authors1 
               ON authors.city 
                = authors1.city
               AND authors.au_id
                <> authors1.au_id
      WHERE
         authors.city = 'Berkeley'

Das Resultset wurde verbessert:

   Cheryl Carson       Abraham Bennet
   Abraham Bennet      Cheryl Carson

Die zwei Ergebniszeilen sind jedoch redundant. Die erste Zeile gibt an, dass Carson in derselben Stadt wie Bennet lebt, und mit der zweiten Zeile wird angegeben, dass Bennet in derselben Stadt wie Carson lebt. Um diese Redundanz auszuschließen, können Sie die zweite Verknüpfungsbedingung von "ungleich" in "kleiner als" ändern. Die entsprechende Abfrage könnte folgendermaßen aussehen:

   SELECT 
         authors.au_fname, 
         authors.au_lname, 
         authors1.au_fname AS Expr2, 
         authors1.au_lname AS Expr3
      FROM 
         authors 
            INNER JOIN
            authors authors1 
               ON authors.city 
                = authors1.city
               AND authors.au_id
                < authors1.au_id
      WHERE
         authors.city = 'Berkeley'

Das Resultset sieht wie folgt aus:

   Cheryl Carson       Abraham Bennet
Hinweis:

Die angezeigten Dialogfelder und Menübefehle können je nach den aktiven Einstellungen oder der verwendeten Version von den in der Hilfe beschriebenen abweichen. Sie können die Einstellungen ändern, indem Sie im Menü Extras auf Einstellungen importieren und exportieren klicken. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

So erstellen Sie manuell eine Selbstverknüpfung

  1. Fügen Sie dem Diagrammbereich die gewünschte Tabelle bzw. das gewünschte Tabellenwertobjekt hinzu.

  2. Fügen Sie dieselbe Tabelle erneut hinzu, sodass die Tabelle bzw. das Tabellenwertobjekt im Diagrammbereich zweimal angezeigt wird.

    Der Abfrage- und Ansicht-Designer weist der zweiten Instanz einen Alias zu, indem dem Tabellennamen eine laufende Nummer hinzugefügt wird. Außerdem erstellt der Abfrage- und Ansicht-Designer im Diagrammbereich eine Verknüpfungslinie zwischen den beiden Instanzen der Tabelle bzw. des Tabellenwertobjekts.

  3. Klicken Sie mit der rechten Maustaste auf die Verknüpfungslinie, und wählen Sie im Kontextmenü die Option Eigenschaften aus.

  4. Klicken Sie im Eigenschaftenfenster auf Verknüpfungskondition und -typ und anschließend auf die Auslassungszeichen (…), die rechts neben der Eigenschaft angezeigt werden.

  5. Ändern Sie im Dialogfeld Verbinden den Vergleichsoperator zwischen den Primärschlüsseln nach Bedarf. Sie können z. B. den Operator in Kleiner als (<) ändern.

  6. Erstellen Sie die zusätzliche Verknüpfungsbedingung (z. B. authors.zip = authors1.zip), indem Sie den Namen der primären Verknüpfungsspalte aus der ersten Instanz der Tabelle bzw. des Tabellenwertobjekts ziehen und in der entsprechenden Spalte der zweiten Instanz ablegen.

  7. Geben Sie weitere Optionen für die Abfrage an (z. B. Ausgabespalten, Suchbedingungen und Sortierreihenfolge).

Siehe auch

Aufgaben

Gewusst wie: Automatisches Erstellen von Selbstverknüpfungen

Weitere Ressourcen

Erstellen von Abfragen mit Verknüpfungen