Freigeben über


Manuelles Erstellen von Self-Joins (Visual Database Tools)

Gilt für:SQL Server-

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 im Dialogfeld „Verknüpfung“ den Vergleichsoperator zwischen den Primärschlüsseln nach Bedarf. 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)