sql >> Databáze >  >> RDS >> SQLite

SQLite Self-Join

Shrnutí :v tomto tutoriálu se dozvíte o speciálním typu spojení zvaném SQLite self-join, který vám umožní připojit tabulku k sobě samému.

Pamatujte, že byste měli být obeznámeni s INNER JOIN a LEFT JOIN klauzule před pokračováním v tomto tutoriálu.

Úvod do SQLite self-join

Vlastní spojení je speciální druh spojení, které vám umožní připojit tabulku k sobě pomocí LEFT JOIN nebo INNER JOIN doložka. Pomocí vlastního spojení vytvoříte sadu výsledků, která spojí řádky s ostatními řádky ve stejné tabulce.

Protože nemůžete v dotazu odkazovat na stejnou tabulku více než na jednu, musíte použít alias tabulky, abyste přiřadili tabulce jiný název, když použijete self-join.

Vlastní spojení porovnává hodnoty stejných nebo různých sloupců ve stejné tabulce. Vlastního připojení se účastní pouze jedna tabulka.

Samopřipojení často používáte k dotazování na vztah rodiče/dítě uložené v tabulce nebo k získání průběžných součtů.

Příklady vlastního připojení SQLite

Použijeme employees tabulka ve vzorové databázi pro demonstraci.

employees tabulka ukládá nejen data zaměstnanců, ale také organizační data. ReportsTo sloupec určuje vztah mezi zaměstnanci.

Pokud se zaměstnanec hlásí manažerovi, hodnota ReportsTo sloupec řádku zaměstnance se rovná hodnotě EmployeeId sloupec řádku manažera. V případě, že se zaměstnanec nikomu nehlásí, ReportsTo sloupec je NULL .

Chcete-li získat informace o tom, kdo je komu přímo podřízen, použijte následující příkaz:

SELECT m.firstname || ' ' || m.lastname AS 'Manager',
       e.firstname || ' ' || e.lastname AS 'Direct report' 
FROM employees e
INNER JOIN employees m ON m.employeeid = e.reportsto
ORDER BY manager;Code language: SQL (Structured Query Language) (sql)

Zkuste to

Příkaz používal INNER JOIN klauzule pro připojení k employees k sobě samému. employees tabulka má dvě role:zaměstnance a manažery.

Protože jsme použili INNER JOIN klauzule pro připojení k employees tabulka sama o sobě, sada výsledků nemá řádek, jehož sloupec správce obsahuje NULL hodnotu.

Všimněte si, že operátor zřetězení || zřetězí více řetězců do jednoho řetězce. V příkladu používáme operátor zřetězení z celých jmen zaměstnanců zřetězením křestního jména, mezery a příjmení.

V případě, že se chcete zeptat generálního ředitele, který se nikomu nehlásí, musíte změnit INNER JOIN klauzule na LEFT JOIN klauzule v dotazu výše.

Andrew Adams je generálním ředitelem, protože nikoho nehlásí.

Techniku ​​self-join můžete použít k nalezení zaměstnanců nacházejících se ve stejném městě jako následující dotaz:

SELECT DISTINCT
	e1.city,
	e1.firstName || ' ' || e1.lastname AS fullname
FROM
	employees e1
INNER JOIN employees e2 ON e2.city = e1.city 
   AND (e1.firstname <> e2.firstname AND e1.lastname <> e2.lastname)
ORDER BY
	e1.city;Code language: SQL (Structured Query Language) (sql)

Zkuste to

Podmínka spojení má dva výrazy:

  • e1.city = e2.city zajistit, aby se oba zaměstnanci nacházeli ve stejném městě
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname abyste zajistili, že e1 a e2 nejsou stejným zaměstnancem za předpokladu, že neexistují zaměstnanci, kteří mají stejné jméno a příjmení.

V tomto tutoriálu jsme vám ukázali, jak použít techniku ​​SQLite self-join ke spojení tabulky k sobě samému.


  1. MySQL InnoDB neuvolňuje místo na disku po smazání datových řádků z tabulky

  2. Zřetězit hodnoty řádků T-SQL

  3. SQL Server 2008 – Jak vrátím uživatelsky definovaný typ tabulky z funkce s hodnotou tabulky?

  4. mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows atd... očekává, že parametr 1 bude zdrojem