Vinnaren i pepparkakshustävlingen!
2015-11-29, 08:24
  #1
Medlem
Har sökt svar på detta men undrar om det ens går att genomföra, eller så är det sååå lätt:

Jag har en tabell som heter "hundar", typ:

Kod:
hundID, hundNAMN, hundINFO, kullID, mammaID, pappaID

kullID har en FOREIGN KEY i en annan tabell, "kullar":

Kod:
kullID, kullNAMN, kullINFO

Kruxet är alltså att skapa en VIEW av typ

Kod:
hundID, hundNAMN, info, kullNAMN, mammaNAMN, pappaNAMN

när mammaID och pappaID refererar till hundar i samma tabell..??

Kod:
CREATE VIEW hundar_med_namn
AS SELECT hundID, hundNAMN, hundINFO, kullNAMN, mammaNAMN, pappaNAMN
FROM hundar, kullar (?)
WHERE ???

Tänkte lite på att skapa en till tabell, "mammor_pappor" typ:

Kod:
hundID, mammaNAMN, pappaNAMN

där jag skickar in en rad samtidigt som jag skickar in en rad i "hundar". Men de la jag ner rätt så snart då det bara kändes såå korkat! Detta måste ju gå att lösa på något snyggare sätt...

Tacksam för hjälp!
Citera
2015-11-29, 09:10
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av xantee
Har sökt svar på detta men undrar om det ens går att genomföra, eller så är det sååå lätt:

Jag har en tabell som heter "hundar", typ:

Kod:
hundID, hundNAMN, hundINFO, kullID, mammaID, pappaID

kullID har en FOREIGN KEY i en annan tabell, "kullar":

Kod:
kullID, kullNAMN, kullINFO

Kruxet är alltså att skapa en VIEW av typ

Kod:
hundID, hundNAMN, info, kullNAMN, mammaNAMN, pappaNAMN

när mammaID och pappaID refererar till hundar i samma tabell..??

Kod:
CREATE VIEW hundar_med_namn
AS SELECT hundID, hundNAMN, hundINFO, kullNAMN, mammaNAMN, pappaNAMN
FROM hundar, kullar (?)
WHERE ???

Tänkte lite på att skapa en till tabell, "mammor_pappor" typ:

Kod:
hundID, mammaNAMN, pappaNAMN

där jag skickar in en rad samtidigt som jag skickar in en rad i "hundar". Men de la jag ner rätt så snart då det bara kändes såå korkat! Detta måste ju gå att lösa på något snyggare sätt...

Tacksam för hjälp!
Det är inget som hindrar att du joinar en tabell på sig själv, fler gånger om så behövs, som i detta fall...

Vad händer om du provar följande:

Kod:
CREATE VIEW hundar_med_namn
AS SELECT h1.hundID,h1hundNAMNh1.hundINFOk1.kullNAMNh2.hundNamnh3.hundNamn
FROM hundar h1
INNER JOIN hundar h2 ON h1
.mammaIdh2.hundId
INNER JOIN hundar h3 ON h1
.pappaIdh3.hundId
INNER JOIN kullar k1 ON h1
.kullId k1.kullId 

Den där borde ju kunna funka.
Citera
2015-11-29, 20:21
  #3
Medlem
Tackar! Lärorikt! Första gången jag använder mig av en "Vy"...

Det gick så när som på att man ju inte kan ha "namn" mer än en gång, men det var ju inga problem att lösa så sett, bara en liten parantes som saknades :

Kod:
CREATE VIEW hundar_med_namn (hundID, hundNAMN, hundINFO, kullNAMN, mammaNAMN, pappaNAMN)
AS SELECT h1.hundID,h1. hundNAMN, h1.hundINFO, k1.kullNAMN, h2.hundNamn, h3.hundNamn 
FROM hundar h1 
INNER JOIN hundar h2 ON h1.mammaId= h2.hundId 
INNER JOIN hundar h3 ON h1.pappaId= h3.hundId 
INNER JOIN kullar k1 ON h1.kullId = k1.kullId  

MEN när jag kollar i tabellen, eller "vyn" rättare sagt...

Kod:
SELECT * FROM hundar_med_namn

...så har jag fattat det som att jag automatiskt borde få fram alla hundar (nu då med alla namn istället för ID:n...), men där var det tomt...

Har jag missat något?
Citera
2015-11-30, 08:44
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av xantee
Tackar! Lärorikt! Första gången jag använder mig av en "Vy"...

Det gick så när som på att man ju inte kan ha "namn" mer än en gång, men det var ju inga problem att lösa så sett, bara en liten parantes som saknades :

Kod:
CREATE VIEW hundar_med_namn (hundID, hundNAMN, hundINFO, kullNAMN, mammaNAMN, pappaNAMN)
AS SELECT h1.hundID,h1. hundNAMN, h1.hundINFO, k1.kullNAMN, h2.hundNamn, h3.hundNamn 
FROM hundar h1 
INNER JOIN hundar h2 ON h1.mammaId= h2.hundId 
INNER JOIN hundar h3 ON h1.pappaId= h3.hundId 
INNER JOIN kullar k1 ON h1.kullId = k1.kullId  

MEN när jag kollar i tabellen, eller "vyn" rättare sagt...

Kod:
SELECT * FROM hundar_med_namn

...så har jag fattat det som att jag automatiskt borde få fram alla hundar (nu då med alla namn istället för ID:n...), men där var det tomt...

Har jag missat något?
Är det tomt är det fel ja...

Att det är tomt tyder på att en eller fler av joinarna inte funkar som avsett.

INNER JOIN förutsätter att värden finns i bägge tabellerna du försöker joina, saknas det i en eller bägge av dem blir det inget värde alls.

Så, för att debugga vyn föreslår jag att du gör om INNER JOIN till LEFT OUTER JOIN och sedan lägger till h2.hundId och h3.hundId i frågan för att kolla idna.

h2 ska ju hålla mammaId och h3 ska ju hålla pappaId. Är det nånstans där det fallerar?

Samma sal gäller såklart för kullId, gör om INNER JOIN till LEFT OUTER JOIN på kullid och kolla vad som kommer ut.
Citera
2015-11-30, 10:34
  #5
Medlem
fnirps avatar
Du verkar ju fått svar på själva frågan, men kan inte låta bli att lägga mig i för det :-)

Pekarna till valpens mor och far borde inte ligga i hundtabellen, utan i kull-tabellen. För mig veterligt så brukar alla valpar i en kull ha samma mor och far.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback