sql >> Database teknologi >  >> RDS >> Mysql

Forståelse af selvtilslutning

Selvsammenføjning er som en indre sammenkædning, hvor to eller flere forekomster af samme tabel er forbundet gennem en fælles datatypekolonne/felt. En sådan joinforbindelse (indre join) giver de fælles rækker som resultat, baseret på sammenføjningsbetingelsen.

Medarbejdertabellen indeholder tre poster. I dette tilfælde,

medarbejder som ansat:

+-----+---------------+------------+ | id | employee | manager_id | +-----+---------------+------------+ | 1 | Ola | NULL | | 2 | Ahmed | 1 | | 3 | Tove | 1 | +----------+----------+------------+

medarbejder som leder:

+-----+---------------+------------+ | id | employee | manager_id | +-----+---------------+------------+ | 1 | Ola | NULL | | 2 | Ahmed | 1 | | 3 | Tove | 1 | +----------+----------+------------+

Nu første tilfælde:Lad os prøve dette for at forstå forskellen:

VÆLG emp.* , manager.* FRA medarbejder som ansat, medarbejder som lederWHERE emp.id =manager.manager_id

+-----+---------------+------------+-----+---------------+------------+ | id | employee | manager_id | id | employee | manager_id | +-----+---------------+------------+-----+---------------+------------+ | 1 | Ola | NULL | 2 | Ahmed | 1 | | 1 | Ola | NULL | 3 | Tove | 1 | +----------+----------+------------+----------+----------+------------+

Se, emp.id =manager.manager_id . Således giver ansat.medarbejder som NAVN rækker af Ola fra første bord &leder.medarbejder som MANAGER giver rækker af Ahmed &Tove fra anden tabel.

Nu andet tilfælde:Lad os prøve dette for at forstå forskellen:

VÆLG emp.* , manager.* FRA medarbejder som ansat, medarbejder som lederWHERE manager.id =emp.manager_id

+-----+---------------+------------+-----+---------------+------------+ | id | employee | manager_id | id | employee | manager_id | +-----+---------------+------------+-----+---------------+------------+ | 2 | Ahmed | 1 | 1 | Ola | NULL | | 3 | Tove | 1 | 1 | Ola | NULL | +----------+----------+------------+----------+----------+------------+

Se, manager.id =emp.manager_id . Således giver ansat.medarbejder som NAVN rækker af Ahmed &Tove fra første bord &leder.medarbejder som MANAGER giver rækker af Ola fra anden tabel.



  1. Forbedring af MySQL-ydeevne på en Run-Once-forespørgsel med et stort datasæt

  2. læs BLOB fra mysql ved hjælp af php PDO

  3. Hvordan fungerer MySQL CASE?

  4. Er der nogen fordel/ulempe ved at gemme feltværdi som et JSON-array i stedet for at skabe en ny tabel og en-til-mange-relation ved at satse dem?