Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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. Verktyg för fråge- och vydesignern (Visual Database Tools) 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 city du kolumnen i den första instansen av tabellen mot kolumnen i den andra instansen city . 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 AS 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 AS 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 AS 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
Lägg till det tabell- eller tabellvärdesobjekt som du vill arbeta med i diagramfönstret (Visual Database Tools ).
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.
Högerklicka på kopplingsraden och välj Egenskaper på snabbmenyn.
I fönstret Egenskaper väljer du Kopplingsvillkor och Typ och väljer ellipserna (...) till höger om egenskapen.
I dialogrutan Koppla ändrar du jämförelseoperatorn mellan de primära nycklarna efter behov. Du kan till exempel ändra operatorn till mindre än (<).
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.
Ange andra alternativ för frågan, till exempel utdatakolumner, sökvillkor och sorteringsordning.