Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ástroje návrháře dotazů a zobrazení (Visual Database Tools) 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 city sloupec v první instanci tabulky se sloupcem city 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 AS 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 AS 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 AS 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
Ruční vytvoření připojení k vlastnímu připojení
Přidejte do podokna Diagram (Visual Database Tools) objekt s hodnotou tabulky nebo 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 vyberte Podmínku spojení a Zadejte a vyberte tři 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í.