Avatar billede ripley Nybegynder
20. oktober 2015 - 19:50 Der er 10 kommentarer

SQL query hvor man henter poster i den ene tabel, der er knyttet til den anden

Jeg har to tabeller i en MS SQL database, den ene indeholder oprettede tråde i et forum, den anden tabel indeholder besvarelser dertil.

Tabellen med besvarelser har en fremmednøgle der peger over på tabellen med tråde. På den måde er de knyttet sammen med relationen én-til-mange.

Hvis jeg gerne vil lave en SQL forespørgsel, der henter alle tråde med tilhørende besvarelser og viser dem i korrekt rækkefølge, f.eks.

traad1
  .. besvarelse1
  .. besvarelse2
  .. besvarelse3
traad2
  .. besvarelse1

osv., hvordan ser min sql query ud? Og er det overhovedet muligt at få resultatet vist på et website (jeg laver det i Visual Studio med C#)?
Avatar billede arne_v Ekspert
20. oktober 2015 - 19:53 #1
SELECT ...
FROM traad JOIN besvarelse ON traad.id = besvarelse.traad_id
ORDER BY traad.id, besvarelse.id

vil hente data og saa er det op til UI at praesentere data som du vil have.
Avatar billede ripley Nybegynder
20. oktober 2015 - 20:04 #2
Er det virkelig så enkelt?

Får jeg så data i rigtig rækkefølge, hvis nu jeg selecter f.eks:

traad.overskrift, traad.tekst, besvarelse.tekst, får jeg så tråd/overskrift/tekst og tilhørende besvarelse/tekst?

Beklager hvis spørgsmålet er lidt .. dumt .. jeg har bare lidt svært ved lige at få vendt query'en i mit hovede i forhold til det resultat der kommer ud af det - og om jeg kan få vist det, som jeg gerne vil :-)
Avatar billede arne_v Ekspert
20. oktober 2015 - 20:14 #3
Du faar det ikke formateret som:

traad1
  svar
  svar
traad2
  svar
  svar

Du faar det som:

traad1 svar
traad1 svar
traad2 svar
traad2 svar

Og saa er det din applikation som skal formatere de data til de oenskede udseende.
Avatar billede Slettet bruger
21. oktober 2015 - 09:57 #4
Som arne_v skriver.

Select t.overskrift,t.tekst,b.Tekst

from traad as T left join Besvarelse as B on t.ID = b.FK_TraadID

Order by overskrift

-- Når du left joiner så tager du alle rækker fra a og ser om der er et match i b. Alle de match der er i b kommer med mens alle rækkker fra a kommer med.

Hvis dukun vil have hvor der er besvarelser skal du inner joine.
Avatar billede ripley Nybegynder
21. oktober 2015 - 19:11 #5
Jamen, det lyder jo helt rigtigt :-)

Men hvis jeg nu vil lave order by i forhold til trådenes kronologiske rækkefølge - og besvarelser i kronologisk rækkefølge, hvad gør jeg så?
Avatar billede arne_v Ekspert
21. oktober 2015 - 19:33 #6
ORDER BY traad.id, besvarelse.id
Avatar billede ripley Nybegynder
21. oktober 2015 - 19:35 #7
Nååå ja, ID'erne modsvarer selvfølgelig rækkefølgen de er oprettet i! Mange tusind tak, det var en stor hjælp :-)

Også til dig, plaidDK, du fik mig lige til at se lyset med left join. Så I må hellere dele point'ene :-)
Avatar billede Slettet bruger
22. oktober 2015 - 08:00 #8
Godt du fik forståelsen for det :)
Avatar billede ripley Nybegynder
22. oktober 2015 - 09:47 #9
Kan man ikke længere dele points? Jeg kan kun acceptere plaidDK's svar med 60 point?
Avatar billede arne_v Ekspert
23. oktober 2015 - 02:50 #10
jeg skal ogsaa smide et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester