webForumDet fria alternativet
Logga in / Bli medlem

subselect...

Databaser & SQL

7 svar · 218 visningar · startad av icaaq

Medlem sedan okt. 20005 273 inlägg
Frågan#1

jag håller på att lägga in massa innebandymatcher i ett dbms(mySQL) och jag undrar nu om detta är ett bra sätt.

jag har en tabell (t_lag) med alla lag:

LagID!LagNamn!osv!osv
---------------------
1!AIK!osv!osv

och sen har jag en tabell (t_matcher) med alla matcher och dylikt.

MatchID!Hemmalag!Bortalag!osv

Är det bättre att lägga in lagID istället LagNamn i tabellen med matcherna?

Medlem sedan dec. 200012 464 inlägg
#2

Om du har behov av att kunna uppdatera lagNamn så skall du använda ett Lagid i Matchtabellen, annars går det på ett ut.

Om det är bra annars beror på vilken information du vill kunna plocka ut.

Vad har detta med subselect att göra?

Medlem sedan okt. 20005 273 inlägg
#3

Vad har detta med subselect att göra?

Jag tänkte ställa fler frågor i det första inlägget, men då gör jag det nu istället.....

om jag kör med lagID i match tabellen då blir det ju en hel del selectsatser när jag ska visa alla matcherna i en serie....

jag har en tanke om hur det ska se ut men rätta mig om den är fel:

strSQL = "SELECT hemmalag, bortalag from t_matcher "&_
"WHERE serie = '"&strSerie&'"
Set ObjRS = ObjConn.Execute(strSQL)
If ObjRS.EOF Then
'inga matcher
Else
Do until ObjRS.EOF
strSQL2 = "SELECT LagNamn t_lag "&_
"WHERE LagID = "&ObjRS("hemmalag")&"
Set ObjRS2 = ObjConn.execute(strSQL2)
If ObjRS2.EOF Then
'nått blev fel
Else
'skriv ut hemmalagets info
End If
strSQL3 = "SELECT LagNamn t_lag "&_
"WHERE LagID = "&ObjRS("Bortalag")&"
Set ObjRS3 = ObjConn.execute(strSQL3)
If ObjRS3.EOF Then
'nått blev fel
Else
'skriv ut Bortalagets info
End If
ObjRS.Movenext
Loop
End If

är detta rätt tänkt eller går det att göra smidigare? :q

Medlem sedan dec. 200012 464 inlägg
#4

Det går att göra så att du får ut all information i en fråga

SELECT h.lagNamn as hnamn, 
       h.x as hx,
       h.y as hy,
       b.lagnamn as bnamn,
       b.x as bx,
       b.y as by 
  from t_lag as h join t_matcher 
    on h.lagid = hemmalag join
       t_lag as b on bortalag = b.lagid
 where serie = 'Serie 4711'

red: syntaxfel i sql.

Medlem sedan okt. 20005 273 inlägg
#5

Vet du att det går att göra så här i mySQL??

Medlem sedan dec. 200012 464 inlägg
#6

Jag är ganska säker på att det fungerar även i Mysql.

Medlem sedan okt. 20005 273 inlägg
#7

nu har jag denna.

SELECT h.F_LAG_NAMN as hnamn,
b.F_LAG_NAMN as bnamn 
from t_lag as h join t_match on h.f_lag_id = f_hemmalag 
join t_lag as b on f_bortalag = b.lagid where f_serie_namn = 'haha'

men jag får

You have an error in your SQL syntax near 'on h.f_lag_id = f_hemmalag 
join t_lag as b on f_bortalag = b.lagid where f_serie'

...jag fattar ju inget av detta så vad kan vara fel?

Medlem sedan dec. 200012 464 inlägg
#8

Något syntax-fel är det inte (inte enligt standard sql i alla fall).
Det beror nog mer på någon brist i Mysql. Om du testar med att kvalificera alla kolumnreferenser då

SELECT h.F_LAG_NAMN as hnamn,
b.F_LAG_NAMN as bnamn 
from t_lag as h join t_match as t on h.f_lag_id = t.f_hemmalag 
join t_lag as b on t.f_bortalag = b.lagid where t.f_serie_namn = 'haha'
251 ms totalt · 4 externa anrop · v20260731065814-full.05830320
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)