MySQL
En till många
Sök…
Introduktion
Idén med en till många (1: M) handlar om att rader sammanfogas, särskilt fall där en enda rad i en tabell motsvarar många rader i en annan.
1: M är en riktning, det vill säga, när du frågar en 1: M-relation, kan du använda raden "en" för att välja "många" rader i en annan tabell, men du kan inte använda en enda "många" rad för att välj mer än en enda "en" rad.
Anmärkningar
För de flesta fall kräver det att vi arbetar med en 1: M-relation att vi förstår primära nycklar och utländska nycklar .
En primär nyckel är en kolumn i en tabell där varje enskild rad i den kolumnen representerar en enda enhet, eller om du väljer ett värde i en primär nyckelkolumn resulterar du i exakt en rad. Med hjälp av ovanstående exempel representerar en EMP_ID en enda anställd. Om du frågar efter en enda EMP_ID ser du en enda rad som representerar motsvarande anställd.
En utländsk nyckel är en kolumn i en tabell som motsvarar den primära nyckeln i en annan tabell. Från vårt exempel ovan är MGR_ID i tabellen MEDARBETARE en utländsk nyckel. För att gå med i två tabeller kommer du i allmänhet att gå med dem baserat på den primära nyckeln i en tabell och den främmande nyckeln i en annan.
Exempel på företagstabeller
Tänk på ett företag där varje anställd som är chef, hanterar en eller flera anställda och varje anställd endast har en chef.
Detta resulterar i två tabeller:
MEDARBETARE
anst_id | FÖRNAMN | EFTERNAMN | MGR_ID |
---|---|---|---|
E01 | Johnny | Appleseed | M02 |
E02 | Erin | Macklemore | M01 |
E03 | Colby | pappers~~POS=TRUNC | M03 |
E04 | ron | Sonswan | M01 |
MANAGERS
MGR_ID | FÖRNAMN | EFTERNAMN |
---|---|---|
M01 | Högt | McQueen |
M02 | Bossig | Byxor |
M03 | Tunna | Jones |
Få de anställda som hanteras av en enda chef
SELECT e.emp_id , e.first_name , e.last_name FROM employees e INNER JOIN managers m ON m.mgr_id = e.mgr_id WHERE m.mgr_id = 'M01' ;
Resulterar i:
anst_id | FÖRNAMN | EFTERNAMN |
---|---|---|
E02 | Erin | Macklemore |
E04 | ron | Sonswan |
I slutändan kommer vi att se 1 eller fler anställda för varje chef som vi frågar efter.
Skaffa chefen för en enda anställd
Se ovanstående exempel tabeller när du tittar på detta exempel.
SELECT m.mgr_id , m.first_name , m.last_name FROM managers m INNER JOIN employees e ON e.mgr_id = m.mgr_id WHERE e.emp_id = 'E03' ;
MGR_ID | FÖRNAMN | EFTERNAMN |
---|---|---|
M03 | Tunna | Jones |
Eftersom detta är det omvända i exemplet ovan, vet vi att vi för varje anställd som vi frågar efter bara kommer att se en motsvarande chef.