Sdílet prostřednictvím


Použití tabulky dvakrát v jednom dotazu

Můžete použít stejné tabulky dvou (nebo více) časy v jediném dotazu.Existuje několik situací, ve kterých lze provést.

  • Vytvoření vlastního spojení s reflexivní relace tabulky lze spojit samu se sebou pomocí reflexivní relace – relace, ve které odkazující sloupce cizího klíče a sloupce primárního klíče odkazuje jsou ve stejné tabulce.Například Předpokládejme, že tabulka zaměstnanců obsahuje sloupec emp_id a že cizí klíč existuje zaměstnance.V rámci každého řádku tabulky zaměstnanců emp_id vedoucího zaměstnance.Přesněji označuje emp_id vedoucího zaměstnance.

    Sám pomocí této reflexivní relace spojením tabulky můžete vytvořit sadu výsledků, v níž každý řádek obsahuje název vedoucího a jméno jednoho z jeho podřízených zaměstnanců.Výsledný příkaz SQL může vypadat například takto:

    SELECT 
        boss.lname, 
        boss.fname, 
        employee.lname, 
        employee.fname
    FROM 
        employee
            INNER JOIN 
            employee boss 
            ON employee.manager_emp_id 
            =  boss.emp_id
    

    Další informace o vytváření pomocí reflexivní relace spojení, viz Jak: vytvoření vlastních spojeních automaticky.

  • Vytvoření vlastního spojení bez použití reflexivní relace tabulku lze spojit samu bez použití reflexivní relace.Můžete například vytvořit sadu výsledků, v níž každý řádek popisuje zaměstnance a potenciální poradcem pro tohoto zaměstnance.(Nepřímý nadřízený je zaměstnanec s funkcí vyšší úrovně.) Výsledný příkaz SQL může vypadat například takto:

    SELECT 
        employee.fname, 
        employee.lname, 
        mentor.fname, 
        mentor.lname 
    FROM 
        employee 
            INNER JOIN 
            employee mentor 
            ON employee.job_lvl 
            <  mentor.job_lvl
    

    Všimněte si, že toto spojení používá jinou podmínku než rovnost.Další informace o spojování tabulek pomocí podmínek než rovnost Operátory porovnání spojení.

    Další informace o vytváření vlastních spojeních, použití nesouvisejících sloupců, naleznete v Jak: vytvoření vlastních spojeních ručně.

  • Pomocí tabulky dvakrát bez vlastního spojení sudý bez vlastního spojení můžete použít dvakrát stejné tabulky (nebo více) v dotazu.Můžete například vytvořit sadu výsledků obsahující další díla autora nebo autorů oblíbené knihy.V takovém případě použijete tabulku Enemy dvakrát – jednou k nalezení autorů oblíbené knihy (Is Anger the Enemy?) a jednou k nalezení dalších knih těchto autorů.Výsledný příkaz SQL může vypadat například takto:

    SELECT 
        other_title.title
    FROM 
        titles favorite_title 
            INNER JOIN 
            titleauthor favorite_titleauthor 
            ON favorite_title.title_id 
            =  favorite_titleauthor.title_id 
                INNER JOIN 
                authors 
                ON favorite_titleauthor.au_id 
                =  authors.au_id 
                    INNER JOIN 
                    titleauthor other_titleauthor 
                    ON authors.au_id 
                    =  other_titleauthor.au_id 
                        INNER JOIN 
                        titles other_title 
                        ON other_titleauthor.title_id 
                        =  other_title.title_id 
    WHERE 
        favorite_title.title 
        = 'Is Anger the Enemy?' 
      AND 
        favorite_title.title 
        <> other_title.title 
    

    [!POZNÁMKA]

    Chcete-li rozlišovat mezi více používá všechny v jedné tabulce, dotazu použity následující aliasy: favorite_title, favorite_titleauthor, other_titleauthor a other_title.Další informace o aliasy viz Jak: vytvoření aliasu tabulky.

Viz také

Koncepty

Práce s daty v podokně výsledků

Další zdroje

Zadávání kritérií vyhledávání