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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow