Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server-
U kunt een tabel aan zichzelf koppelen, zelfs als de tabel geen reflexieve relatie heeft in de database. U kunt bijvoorbeeld een self-join gebruiken om paren auteurs te vinden die in dezelfde stad wonen.
Net als bij elke join zijn ten minste twee tabellen vereist voor een self-join. Het verschil is dat u, in plaats van een tweede tabel toe te voegen aan de query, een tweede exemplaar van dezelfde tabel toevoegt. Op die manier kunt u een kolom in het eerste exemplaar van de tabel vergelijken met dezelfde kolom in het tweede exemplaar, waarmee u de waarden in een kolom met elkaar kunt vergelijken. De Ontwerpfunctie voor query's en weergaven wijst een alias toe aan het tweede exemplaar van de tabel.
Als u bijvoorbeeld een self-join maakt om alle paren auteurs in Berkeley te vinden, vergelijkt u de kolom city
in het eerste exemplaar van de tabel met de kolom city
in het tweede exemplaar. De resulterende query kan er als volgt uitzien:
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'
Voor het maken van een self-join zijn vaak meerdere joinvoorwaarden vereist. Bekijk het resultaat van de voorgaande query om te begrijpen waarom:
Cheryl Carson Cheryl Carson
Abraham Bennet Abraham Bennet
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
De eerste rij is nutteloos; Het geeft aan dat Cheryl Carson in dezelfde stad woont als Cheryl Carson. De tweede rij is even nutteloos. Als u deze nutteloze gegevens wilt elimineren, voegt u een andere voorwaarde toe die alleen die resultaatrijen behoudt waarin de twee auteursnamen verschillende auteurs beschrijven. De resulterende query kan er als volgt uitzien:
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'
De resultatenset is verbeterd:
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Maar de twee resultaatrijen zijn overbodig. De eerste zegt dat Carson in dezelfde stad woont als Bennet, en de tweede zegt dat bennet in dezelfde stad woont als Carson. Als u deze redundantie wilt elimineren, kunt u de tweede joinvoorwaarde wijzigen van 'niet gelijk aan' in 'kleiner dan'. De resulterende query kan er als volgt uitzien:
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'
De resultatenset ziet er als volgt uit:
Cheryl Carson Abraham Bennet
To create a self-join manually
Voeg toe aan het deelvenster Diagram het tabel- of tabelwaardeobject waarmee u wilt werken.
Voeg dezelfde tabel opnieuw toe, zodat in het deelvenster Diagram twee keer hetzelfde tabel- of tabelwaardeobject wordt weergegeven.
De ontwerpfunctie voor query's en weergaven wijst een alias toe aan het tweede exemplaar door een volgnummer toe te voegen aan de tabelnaam. In addition, the Query and View Designer creates a join line between the two occurrences of the table or table-valued object within the Diagram pane.
Right-click the join line and choose Properties from the shortcut menu.
In the Properties window click Join Condition and Type and click the ellipses (...) to the right of the property.
Wijzig in het dialoogvenster Join de vergelijkingsoperator tussen de primaire sleutels, indien nodig. For example, you might change the operator to less than (<).
Create the additional join condition (for example, authors.zip = authors1.zip) by dragging the name of the primary join column in the first occurrence of the table or table-valued object and dropping it on the corresponding column in the second occurrence.
Geef andere opties op voor de query, zoals uitvoerkolommen, zoekvoorwaarden en sorteervolgorde.
Zie ook
Create Self-Joins Automatically (Visual Database Tools)
Opvraging met gebruik van joins (Visual Database Tools)