Sdílet prostřednictvím


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ě

  1. Přidejte do podokna diagramu tabulku nebo objekt s hodnotou 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 klikněte na Podmínka spojení a na a klikněte na 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í.

Viz také

Automatické vytváření Self-Joins (Visual Database Tools)
dotaz pomocí spojení (Visual Database Tools)