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
Lägg till i fönstret Diagram det tabell- eller tabellvärdeobjekt som du vill arbeta med.
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 klickar du på Kopplingsvillkor och typ och klickar sedan på ellipser (...) 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.
Se även
Skapa Self-Joins automatiskt (Visual Database Tools)
Sökfråga med sammanfogningar (Visual Database Tools)