Avatar billede Slettet bruger
25. juli 2011 - 09:17 Der er 8 kommentarer og
1 løsning

ASP+MSSQL: Innerjoin

Hey eksperter.

Jeg har læst mig frem til innerjoin funktionen i SQL, men kan ikke lige se mig ud af hvordan det rent faktisk virker i praksis.

Jeg har pt. følgende måde at sammenkæde 2 tabeller på, groft:
sql = "select * from users"
set rs = conn.execute(sql)

if not rs.eof then
  do until rs.eof
    id = rs("id")
    sql2 = "select * from informations where id = " & id
    set rs2 = conn.execute(sql2)
   
    if not rs.eof then
      fullname = rs2("fullname")
    end if
   
    response.write("Bruger " & id & " hedder " & fullname & ".")
    rs.movenext
  loop
end if


Men vil jo så gerne have det i én sql sætning, for at optimere kørselstiden.
25. juli 2011 - 09:37 #1
Det ser ud til, at du har to tabeller, users og informations der er forbundet derved at informations.id = users.id.  Du skal bruge id'en fra users og fullname fra informations.  Det får du med denne query:

SELECT users.id, informations.fullname FROM users JOIN informations ON users.id = informations.id
25. juli 2011 - 09:40 #2
Men så undrer jeg mig lidt over din tabelstruktur.  Hvis der er en en-til-en relation mellem users og information, således at du i tabellen users har id, username, oprettet-dato og hvad du ellers skal vide om users, og så i tabellen informations med den samme id har fullname, adresse, telefon o.s.v., hvorfor har du så ikke bare en enkel tabel users med id, username, oprettet-dato, fullname, adresse, o.s.v.?
Avatar billede Slettet bruger
25. juli 2011 - 10:01 #3
Jeg fik selvfølgelig skrevet forkert.
Min sql2 henter vha. where owner = " & id or ikke id = " & id.
Der kan sagtens være flere rækker med forskellige informationer fra samme brugerid i user tabellen :)
Det er gjort for, at gemme informationshistorik, men i denne information tabel er kun én af alle de rækker active = 1 og resten active = 0
25. juli 2011 - 10:14 #4
I så fald bliver forespørgslen denne:

SELECT users.id, informations.fullname FROM users JOIN informations ON users.id = informations.owner
Avatar billede Slettet bruger
25. juli 2011 - 12:53 #5
I denne forespørgsel henter jeg ALLE rækker fra users, men hvis jeg blot skal have én specifik (ud fra et unikt id), skal den så hedde:

select users.id, informations.fullname from users where id = " & id & " join informations on users.id = informations.owner

? :) Og hvis jeg i stedet skal have ALLE kolonner fra de to tabeller kan jeg blot udskifte users.id, informations.fullname med * ?
Og hvad hvis jeg skal have alle rækker fra users, men kun én specifik (fullname) fra informations? :)

Jeg opbygger lige et par hvad nu hvid-scenarier for helt at forstå join funktionen :)
25. juli 2011 - 13:40 #6
Nu er jeg ikke så skrap til asp - spørgsmålet ligger i kategorien MS SQL, men sql syntaks er altid at man først joiner tabellerne og derefter begrænser til for eksempel en bestemt id, så det må nok være således:

SELECT users.id, informations.fullname FROM users join informations ON users.id = informations.owner WHERE users.id = &id

Alle rækker fra begge tabeller:  SELECT * FROM (o.s.v. resten af forespørgslen).

Og alle kolonner fra users (jeg går ud fra at det er kolonner du mener) og fullname fra informations:

SELECT users.*, informations.fullname FROM (o.s.v)
27. juli 2011 - 13:59 #7
erizias, fik du mit indlæg #6?  Var det til nytte?  Giv genlyd.
Avatar billede Slettet bruger
01. august 2011 - 10:43 #8
Beklager, at jeg ikke lige fik svaret tilbage, men jeg fik lige en hurtig afbudsrejse :)
Jeg siger mange tak for hjælpen :)
01. august 2011 - 11:37 #9
Forhåbenlig en turistrejse - hvor gik turen hen?  (På dette spørgsmål gives ingen points.)
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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



IT-JOB

Cognizant Technology Solutions Denmark ApS

Test Architect - Projects

Udviklings- og Forenklingsstyrelsen

Backend-udvikler til ny platform i Azure

Capgemini Danmark A/S

Salesforce CTO - Nordics