Sdílet prostřednictvím


Ruční vytváření samoobslužných spojení (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á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í

  1. Přidejte do podokna Diagram (Visual Database Tools) objekt s hodnotou tabulky nebo tabulky, se kterým chcete pracovat.

  2. 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.

  3. Pravým tlačítkem myši klikněte na spojnici a v místní nabídce zvolte Vlastnosti.

  4. V okně Vlastnosti vyberte Podmínku spojení a Zadejte a vyberte tři tečky (...) napravo od vlastnosti.

  5. 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ž (<).

  6. 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.

  7. Zadejte další možnosti dotazu, jako jsou výstupní sloupce, podmínky hledání a pořadí řazení.