webForumDet fria alternativet

Insert från flera rader till en kolumn. Går det

Databaser & SQL

2 svar · 319 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Om jag har en tabell som heter tempCourse där jag vill infoga data från en annan tabell. Men också i en kolumn vill jag infoga data från flera rader till en sträng.

INSERT INTO tempCourse (courseID, courseName, courseDate)
SELCT courseID, courseName, courseDate FROM Courses

Detta fungerar. Men i tempCourse finns ytterliggare en kolumn som heter CourseClasses. I den vill jag infoga en lista på klasser som är kopplade till kursen som en sträng liknande: "3B,3C,3A"

Jag kan få fram dessa rader med denna sql-sats:

SELECT     c.className
FROM         courseParticipants AS cp INNER JOIN
                      classParticipants AS clp ON cp.UserID = clp.UserID INNER JOIN
                      classes AS c ON clp.classID = c.classID
WHERE     (cp.courseTeacher = 0) AND (cp.courseID = @courseID)
GROUP BY c.className
ORDER BY c.className

Denna kod listar de olika klasserna och courseID ska såklart vara den raden för kursen som man är på.

Medlem sedan dec. 19996 721 inlägg
#2

Nej, det vill du inte (om det inte är en historik-kolumn). Att lagra flera värden i en kolumn är ett misstag som obönhörligen kommer att bita dig i foten.

I MySQL finns funktioner för att aggregera kolumner i kommalistor och i SQL Server 2005 (m.fl) kan man lägga till sådana funktioner, men du bör verkligen ta en funderare på om du behöver detta.

Vad är själva grundsyftet?

Medlem sedan jan. 20013 406 inlägg
#3

Jag behöver det för att kunna göra jämförelser med data som kommer från en annan databas som vi inte kan påverka. Det ska bara vara en temptabell för att få reda på kursID sedan raderas temptabellen.

300 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
169 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)