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ů