Dela via


Skapa Self-Joins manuellt (Visual Database Tools)

gäller för:SQL Server

Du kan koppla en tabell till sig själv även om tabellen inte har en reflexiv relation i databasen. Du kan till exempel använda en självkoppling för att kunna hitta par med författare som bor i samma stad.

Som med alla kopplingar kräver en självkoppling minst två tabeller. Skillnaden är att du i stället för att lägga till en andra tabell i frågan lägger till en andra instans av samma tabell. På så sätt kan du jämföra en kolumn i den första instansen av tabellen med samma kolumn i den andra instansen, vilket gör att du kan jämföra värdena i en kolumn med varandra. Query och View Designer tilldelar ett alias till den andra instansen av tabellen.

Om du till exempel skapar en självkoppling för att hitta alla par med författare i Berkeley jämför du kolumnen city i den första instansen av tabellen med kolumnen city i den andra instansen. Den resulterande frågan kan se ut så här:

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'  

Att skapa en självkoppling kräver ofta flera kopplingsvillkor. Tänk på resultatet av föregående fråga för att förstå varför:

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

Den första raden är värdelös; det indikerar att Cheryl Carson bor i samma stad som Cheryl Carson. Den andra raden är lika värdelös. För att eliminera dessa oanvändbara data lägger du till ett annat villkor som endast behåller de resultatrader där de två författarnamnen beskriver olika författare. Den resulterande frågan kan se ut så här:

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'  

Resultatuppsättningen har förbättrats:

Cheryl Carson       Abraham Bennet  
   Abraham Bennet      Cheryl Carson  

Men de två resultatraderna är redundanta. Den första säger att Carson bor i samma stad som Bennet, och den andra säger att Bennet bor i samma stad som Carson. För att eliminera redundansen kan du ändra det andra kopplingsvillkoret från "inte lika med" till "mindre än". Den resulterande frågan kan se ut så här:

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'  

Och resultatuppsättningen ser ut så här:

Cheryl Carson       Abraham Bennet  

Skapa en självkoppling manuellt

  1. Lägg till i fönstret Diagram det tabell- eller tabellvärdeobjekt som du vill arbeta med.

  2. Lägg till samma tabell igen så att fönstret Diagram visar samma tabell eller tabellvärdesobjekt två gånger i fönstret Diagram.

    Fråge- och vydesignern tilldelar ett alias till den andra instansen genom att lägga till ett sekventiellt nummer i tabellnamnet. Dessutom skapar fråge- och vydesignern en kopplingslinje mellan de två förekomsterna av tabellen eller tabellvärdesobjektet i fönstret Diagram.

  3. Högerklicka på kopplingsraden och välj Egenskaper på snabbmenyn.

  4. I fönstret Egenskaper klickar du på Kopplingsvillkor och typ och klickar sedan på ellipser (...) till höger om egenskapen.

  5. I dialogrutan Koppla ändrar du jämförelseoperatorn mellan de primära nycklarna efter behov. Du kan till exempel ändra operatorn till mindre än (<).

  6. Skapa ytterligare kopplingsvillkor (till exempel authors.zip = authors1.zip) genom att dra namnet på den primära kopplingskolumnen i den första förekomsten av tabellen eller tabellvärdeobjektet och släppa det på motsvarande kolumn i den andra förekomsten.

  7. Ange andra alternativ för frågan, till exempel utdatakolumner, sökvillkor och sorteringsordning.

Se även

Skapa Self-Joins automatiskt (Visual Database Tools)
Sökfråga med sammanfogningar (Visual Database Tools)