Hej,
Vad är egentligen JOIN och vad används det för? Jag har inte lyckats förstå det efter att ha gått igenom dokumentationen.
Lite hjälp skulle vara bra.
------------------
- Swey
Bäst, vackrast, styggast...
10 svar · 661 visningar · startad av Swey
Hej,
Vad är egentligen JOIN och vad används det för? Jag har inte lyckats förstå det efter att ha gått igenom dokumentationen.
Lite hjälp skulle vara bra.
------------------
- Swey
Bäst, vackrast, styggast...
Join använder du för att länka ihop två tabeller. Låt oss säga att du har följande tabeller:
artiklar
Art_id | col_id
1 | 1
2 | 1
3 | 2
--------------------
color
col_id | color
1 | gul
2 | röd
3 | blå
Istället för att ha allt i samma tabell lägger vi det i två olika, en med artiklar och en med färger.
Om vi nu ska hämta rätt färg till en viss artikel skriver vi:
SELECT color.color
FROM artiklar INNER JOIN
color ON artiklar.col_id = color.col_id
WHERE (artiklar.art_id = 1)
Här hämtar vi färgen för den artikel som har artikelnummer 1. Eftersom col_id är 1 där artikelnumret är 1 så får vi färgen "gul" som svar.
Skulle vi hämtat där artikel_id var 3 skulle vi ex. fått röd som svar, eftersom col_id där var 2 och 2 står för röd i tabellen color.
Att använda join:s är ett måste om man ska bygga relationsdatabaser och indexerade tabeller.
Kanske blev lite "luddigt" svar, men du förstår nog!
------------------
Fredrik Klarqvist
fredrik.klarqvist@swipnet.se
www.streetwise.se/fredrik/
Tack för ditt svar. Jag förstod hur du menade.
Att använda join:s är ett måste om man ska bygga relationsdatabaser och indexerade tabeller.
Vet inte om det stämmer. Vad är fördelen med JOIN? Det går lika bra att skriva
select color.color from artiklar, color where artiklar.col_id = color.col_id and artiklar.id = 1;
Koden blir lite mer lättläst med JOIN men finns det någon annan fördel?
Och kan man använda JOIN till något mer?
------------------
- Swey
Bäst, vackrast, styggast...
[Redigerat av Swey den 08 sep 2000]
I mitt exempel hade jag bara två tabeller som jag länkade ihop. Om vi kanske hade haft 7 eller 8 tabeller så hade det blivit väldigt krångligt att skriva utan joins.
Dessutom finns funktionerna "left" och "right" join som ex. kan plocka ut ALLA poster från den "vänstra" tabellen vare sig de stämmer överens med "where" satsen eller inte MEN bara de poster från den "högra" som stämmer med "where"-satsen.
Hoppas de klarnar lite nu!
------------------
Fredrik Klarqvist
fredrik.klarqvist@swipnet.se
www.streetwise.se/fredrik/
RIGHT har jag inte hittat något om men LEFT var just det jag letade efter. Den funktionen finns inte i en SELECT-sats!
Nu en till fråga om JOIN. Jag har en användatdatabas och en artikeldatabas. Artikeldatabasen har två referenser till användaradatabasen. En skapare och en ändrare.
Användardatabasen (users): ID, Name
Artikeldatabas (arts): ID, CreateUserID, ModUserID
Jag kan använda följande SQL-sats för att få fram namnen på skaparna:
SELECT * FROM arts INNER JOIN users ON CreateUserID = users.ID
Hur gör jag nu för att ta ut båda namnen på samma gång?
------------------
- Swey
Bäst, vackrast, styggast...
hmmm... jag vet inte riktigt om jag har förstått frågan rätt men...jag antar att vad du vill göra är att plocka ut värden från båda tabellerna (?)
Då använder du samma sql-sats som du skrev fast du lägger till lite så det blir:
SELECT arts.createuserID, users.name
FROM arts INNER JOIN
users ON arts.createuserID = users.ID
Här hämtar den alltså createuserID från arts och name från users.
Vad det nåt sånt du var ute efter?
------------------
Fredrik Klarqvist
fredrik.klarqvist@swipnet.se
www.streetwise.se/fredrik/
Tack men du missförstod mig.
Hur gör jag nu för att ta ut båda namnen på samma gång?
Både CreateUserID och ModUserID pekar till en användare. Jag vet hur jag kan få ut en användare i taget(jag visade hur jag kunde få ut CreateUserID) men inte båda samtidigt.
Om arts ser ut så här:
+------+------------+---------+
| id | createuser | moduser |
+------+------------+---------+
| 1 | 2 | 0 |
| 2 | 4 | 1 |
| 3 | 0 | 1 |
+------+------------+---------+
Så vill jag ha det så här:
+------+------------+---------+
| id | createuser | moduser |
+------+------------+---------+
| 1 | Två | Noll |
| 2 | Fyra | Ett |
| 3 | Noll | Ett |
+------+------------+---------+
Namnen på användarna ligger i den andra tabellen.
Förstår du nu? :)
------------------
- Swey
Bäst, vackrast, styggast...
[Redigerat av Swey den 13 sep 2000]
Vet inte om det stämmer. Vad är fördelen med JOIN? Det går lika bra att skriva
select color.color from artiklar, color where artiklar.col_id = color.col_id and artiklar.id = 1;
Det är också en join, bara en annan syntax.
emission, tack... jag kom på det själv efter att ha granskat felmeddelandena mycket noggrant. :)
------------------
- Swey
Bäst, vackrast, styggast...