webForumDet fria alternativet

Ännu en SQL-fråga

7 svar · 639 visningar · startad av Gildebrand

GildebrandMedlem sedan juni 2009920 inlägg
#1

Hejsan!
Skulle behöva lite hjälp med en SQL-fråga.
Jag har två tabeller, Students & Parents.

Students:

[B]FirstName, Lastname, Parent1, Parent2[/B]
Anton, Gildebrand, 15, 82

Parents:

[B]ID, Firstname, Lastname[/B]
15, Göta, Svensson
82, Helena, Grötblad

Nu kan jag enkelt med en SQL-fråga få ut Namnen för Parent1 i tabellen students. Jag kan köra följande SQL-Fråga:

Select Students.Firstname, Students.Lastname, Parents.Firstname as PFirstname, Parents.Lastname as PLastname
From Students
Full join Parents
on Student.parent1=parents.id

Då får jag ut följande:

[B]FirstName, Lastname, PFirstName, PLastname[/B]
Anton, Gildebrand, Göta, Svensson

So far so good!
Men nu vill jag få med kolumnen Parent2 också och göra en full join på den så att jag får ut båda föräldrarna vid min fråga. Hur kan jag göra det?

Peter SMedlem sedan dec. 20025 483 inlägg
#2
Select Students.Firstname, Students.Lastname, p1.Firstname as PFirstname1, p1.Lastname as PLastname1, p2.Firstname as PFirstname2, p2.Lastname as PLastname2
From Students
Full join Parents p1
on Student.parent1=p1.id
Full join Parents p2
on Student.parent2=p2.id
GildebrandMedlem sedan juni 2009920 inlägg
#3

Ett steg i rätt riktning :)
Måste dock få bort lite "skit"

Resultatet vid frågan:

[B]Firstname, Lastname, PFirstname1, PLastname1, PFirstname2, PLastname2[/B]
Anton, Gildebrand, Göta, Svensson, Helena, GrötBlad
NULL, NULL, Helena, Grötblad, Null, Null
NULL, NULL, NULL, NULL, Göta, Svensson

Men jag vill bara ha den översta raden, och inte få med de andra

GildebrandMedlem sedan juni 2009920 inlägg
#4

Det löste sig :)

select S.FirstName, s.LastName, p1.firstname as P1FN, p1.lastname as P1LN, p2.firstname as p2fn, p2.lastname as p2ln
from Students s
inner join Parents p1
on s.Parent1=p1.ID
inner join Parents p2
on s.Parent2=p2.ID

Peter SMedlem sedan dec. 20025 483 inlägg
#5

Problemet nu är att du inte får med studenter som saknar en eller två föräldrar. Byt "FULL" mot "LEFT".

GildebrandMedlem sedan juni 2009920 inlägg
#6

Det funkade bra med Inner Join. Så jag är nöjd.
Jag har en till fråga på lut.

Det är så att jag vill lägga till poster i min tabell "Resultat" utifrån mina två tabeller "Användare" och "Ämne".
Jag gör ett litet exempel på vad jag vill göra

Så här ser tabellen Students ut. Jag tar bara med de relevanta kolumnerna i sammanhanget.

[B]ID [/B]
15 
97

Såhär ser tabellen Subjects ut:

[B]ID[/B] 
78 
36 
25

Och nu vill jag skicka in det här i min tabell Resultat. De kolumner som är relevanta i sammanhanget är ID, Användar_ID och Ämnes_ID.
För varje användare ska det skapas en post för varje ämne. Så som här i mitt exempel, så ska det bli sex poster i resultat-tabellen, eftersom 2 användare * 3 ämnen = 6. ID ska genereras av NEWID(), men jag väljer att i det här exemplet att bara använda en siffra. Blir lite jobbigt för er att läsa om jag har UniqueIdentifier.
Så jag vill ha en fråga som skickar in Subjects och Students i Resultat.

Såhär skulle då resultat se ut:

[B]ID, Användar_ID, Ämnes_ID [/B]
1, 15, 78 
2, 15, 36 
3, 15, 25 
4, 97, 78 
5, 97, 36 
6, 97, 25

Förstår du hur jag menar?

GildebrandMedlem sedan juni 2009920 inlägg
#7

Så att resultatet på denna fråga:

select NEWID() as ID, Students.ID as Elev_ID, Subjects.ID as Subject_ID
from Students
cross join Subjects

Petas in i tabellen resultat.

GildebrandMedlem sedan juni 2009920 inlägg
#8

Löste sig

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)