Freigeben über


Manuelles Erstellen von Self-Joins (Visual Database Tools)

Sie können eine Tabelle mit sich selbst verbinden, auch wenn die Tabelle keine reflexive Beziehung in der Datenbank hat. Sie können z. B. einen Selbstbeitritt verwenden, um Autorenpaare zu finden, die in derselben Stadt leben.

Wie bei jeder Verknüpfung wird für eine Selbstverknüpfung mindestens eine Tabelle benötigt, aber sie funktioniert, als wären es zwei. Der Unterschied besteht darin, dass Sie, anstatt der Abfrage eine zweite Tabelle hinzuzufügen, 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, mit der Sie die Werte in einer Spalte miteinander vergleichen können. Der Abfrage- und Ansichts-Designer der zweiten Instanz der Tabelle einen Alias zuweist.

Wenn Sie z. B. eine Selbstverknüpfung erstellen, um alle Autorenpaare innerhalb Berkeley zu finden, vergleichen Sie die Spalte city in der ersten Instanz der Tabelle mit der Spalte city in der zweiten Instanz. Die resultierende Abfrage sieht möglicherweise wie folgt aus:

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 häufig mehrere Verknüpfungsbedingungen. Berücksichtigen Sie das Ergebnis der vorherigen Abfrage, um zu verstehen, warum:

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

Die erste Zeile ist nutzlos; es weist darauf hin, dass Cheryl Carson in derselben Stadt wie Cheryl Carson lebt. Die zweite Zeile ist ebenso nutzlos. Um diese nutzlosen Daten zu beseitigen, fügen Sie eine weitere Bedingung hinzu, in der nur die Ergebniszeilen beibehalten werden, in denen die beiden Autorennamen unterschiedliche Autoren beschreiben. Die resultierende Abfrage sieht möglicherweise wie folgt aus:

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 wird verbessert:

Cheryl Carson       Abraham Bennet  
Abraham Bennet      Cheryl Carson  

Die beiden Ergebniszeilen sind jedoch redundant. Die erste sagt Carson lebt in derselben Stadt wie Bennet, und die zweite sagt, dass bennet in derselben Stadt wie Carson lebt. Um diese Redundanz zu vermeiden, können Sie die zweite Verknüpfungsbedingung von "nicht gleich" in "kleiner als" ändern. Die resultierende Abfrage sieht möglicherweise wie folgt aus:

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'  

Und das Resultset sieht wie folgt aus:

Cheryl Carson       Abraham Bennet  

So erstellen Sie eine Selbstverbindung manuell

  1. Fügen Sie dem Diagrammbereich das Tabellen- oder Tabellenwertobjekt hinzu, mit dem Sie arbeiten möchten.

  2. Fügen Sie die gleiche Tabelle erneut hinzu, sodass im Diagrammbereich dasselbe Tabellen- oder Tabellenwertobjekt zweimal im Diagrammbereich angezeigt wird.

    Der Abfrage- und Ansichts-Designer weist der zweiten Instanz einen Alias zu, indem dem Tabellennamen eine sequenzielle Zahl hinzugefügt wird. Darüber hinaus erstellt der Abfrage- und Ansichts-Designer eine Verknüpfungslinie zwischen den beiden Vorkommen des Tabellen- oder Tabellenwertobjekts im Diagrammbereich.

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

  4. Klicken Sie im Eigenschaftenfenster auf Verknüpfungsbedingung und geben Sie ein, und klicken Sie auf die Auslassungspunkte (...) rechts neben der Eigenschaft.

  5. Ändern Sie nach Bedarf im Dialogfeld „Join“ den Vergleichsoperator zwischen den Primärschlüsseln. Zum Beispiel könnten Sie den Operator auf "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 im ersten Vorkommen des Tabellen- oder Tabellenwertobjekts ziehen und in der entsprechenden Spalte im zweiten Vorkommen ablegen.

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

Siehe auch

Automatisches Erstellen von Self-Joins (Visuelle Datenbanktools)
Abfrage mit Verknüpfungen (Visual Database Tools)