Vytvoření Self-Joins ručně (Visual Database Tools)
platí pro:SQL Server
Tabulku můžete spojit sama se sebou, i když tabulka nemá v databázi reflexní relaci. Můžete například použít vlastní spojení, abyste našli dvojice autorů žijících ve stejném městě.
Stejně jako u jakéhokoli spojení vyžaduje samoopětovné spojení alespoň dvě tabulky. Rozdíl je v tom, že místo přidání druhé tabulky do dotazu přidáte druhou instanci stejné tabulky. Tímto způsobem můžete porovnat sloupec v první instanci tabulky se stejným sloupcem ve druhé instanci, což umožňuje porovnat hodnoty ve sloupci s ostatními. Návrhář dotazů a zobrazení přiřadí alias druhé instanci tabulky.
Pokud například vytváříte samoobslužné spojení pro vyhledání všech dvojic autorů v Berkeley, porovnáte sloupec city
v první instanci tabulky s city
sloupcem ve druhé instanci. Výsledný dotaz může vypadat takto:
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'
Vytvoření samo-spojení často vyžaduje několik podmínek spojení. Pokud chcete zjistit proč, zvažte výsledek předchozího dotazu:
Cheryl Carson Cheryl Carson
Abraham Bennet Abraham Bennet
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
První řádek je neužitevý; označuje, že Cheryl Carson žije ve stejném městě jako Cheryl Carson. Druhý řádek je stejně zbytečný. Chcete-li tato zbytečná data odstranit, přidáte další podmínku, která uchovává pouze řádky výsledků, ve kterých dva jména autorů popisují různé autory. Výsledný dotaz může vypadat takto:
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'
Sada výsledků je vylepšená:
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Ale dva výsledné řádky jsou redundantní. První říká, že Carson žije ve stejném městě jako Bennet, a druhý říká Bennet žije ve stejném městě jako Carson. Chcete-li tuto redundanci odstranit, můžete změnit druhou podmínku spojení z hodnoty "nerovná se" na "menší než". Výsledný dotaz může vypadat takto:
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'
Sada výsledků vypadá takto:
Cheryl Carson Abraham Bennet
K vytvoření samo-spojení ručně
Přidejte do podokna diagramu tabulku nebo objekt s hodnotou tabulky, se kterým chcete pracovat.
Znovu přidejte stejnou tabulku, aby podokno Diagram zobrazovala stejnou tabulku nebo objekt hodnotný tabulkou dvakrát v podokně Diagram.
Návrhář dotazu a zobrazení přiřadí alias druhé instanci přidáním pořadového čísla k názvu tabulky. Návrhář dotazu a zobrazení navíc vytvoří spojnici mezi dvěma výskyty tabulky nebo objektu s hodnotou tabulky v podokně Diagram.
Pravým tlačítkem myši klikněte na spojnici a v místní nabídce zvolte Vlastnosti.
V okně Vlastnosti klikněte na Podmínka spojení a na a klikněte na tečky (...) napravo od vlastnosti.
V dialogovém okně Join změňte operátor porovnání mezi primárními klíči podle potřeby. Můžete například změnit operátor na menší než (<).
Vytvořte další podmínku spojení (například authors.zip = authors1.zip) přetažením názvu primárního sloupce spojení v prvním výskytu objektu tabulky nebo objektu s hodnotou tabulky a přetažením na odpovídající sloupec ve druhém výskytu.
Zadejte další možnosti dotazu, jako jsou výstupní sloupce, podmínky hledání a pořadí řazení.
Viz také
Automatické vytváření Self-Joins (Visual Database Tools)
dotaz pomocí spojení (Visual Database Tools)