webForumDet fria alternativet

Enkel Inner join fråga

17 svar · 350 visningar · startad av mattiasnordin

mattiasnordinMedlem sedan maj 20012 080 inlägg
#1
@ndersMedlem sedan juni 200032 969 inlägg
#2
SELECT R.*, B.bild FROM T_bilregistret R LEFT JOIN T_bil_bilderna B ON R.id_nyckel = B.id_nyckel

Mvh

mattiasnordinMedlem sedan maj 20012 080 inlägg
#3

Tack ska prova. Vad har R. & B. för funktion ???

@ndersMedlem sedan juni 200032 969 inlägg
#4

Det är bara alias, dvs kortnamn, istället för att skriva hela långa tabellnamnen varje gång.

Egentligen ska man väl skriva tabellnamn AS aliasnamn, men as kan man utelämna om man vill.

mattiasnordinMedlem sedan maj 20012 080 inlägg
#5
sql = "SELECT R.*, L.default_bild, L.default_path FROM T_bilregistret R"
sql = sql & "LEFT JOIN T_bil_bilderna L ON R.id_nyckel = L.id_nyckel "

Ger

ADODB.Recordset.1 error '80004005'

SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near 'ON R.id_nyckel = L.id_nyckel ' at line 1

Jag behöver även lägga till WHERE L.default_bild ="ja". Var lägger man till detta ?

@ndersMedlem sedan juni 200032 969 inlägg
#6

Till att börja med saknar du ett mellanslag mellan 'R' och 'LEFT JOIN'.

Ditt villkor borde passa i WHERE sist i SQL-frågan.

Mvh

mattiasnordinMedlem sedan maj 20012 080 inlägg
#7

Vad ett mellanslag kan ställa till det :)

Frågan fungerar men nu inser jag att det inte är LEFT JOIN jag vill göra. Den verkar bara returnera raden där det finns en match i båda tabellerna.

Jag vill ha ut alla info ur T_bilregistret och OM det finns en bild i T_bil_bilderna så ska även denna tas med.

Finns det någon annan typ av join ?

mattiasnordinMedlem sedan maj 20012 080 inlägg
#8

Ha ha ha ha.... Ganska roligt.... Tabellnycklarna är lite felaktiga antar jag.

En gammal toyota har fått fel bild. Ferrarin säljs nu till toyota pris :)

http://www.swesys.se/landrin/begagnade_bilar/begagnade_bilar_start.asp

mattiasnordinMedlem sedan maj 20012 080 inlägg
#9

... eller är det WHERE som ställer till det för mig nu?

sql = "SELECT L.*, R.default_bild, R.bild_path FROM T_bilregistret L "
sql = sql & " LEFT JOIN T_bil_bilderna R ON L.id_nyckel = R.id_nyckel "
sql = sql & " WHERE R.default_bild ='ja'"

Det är alltså en korrekt fråga ovan, men jag behöver få ut alla resultat från vänster och en rad ur höger om den existerar. På höger sida är det två kriterier som måste vara uppfyllda.

??

@ndersMedlem sedan juni 200032 969 inlägg
#10

Då får du använda LEFT OUTER JOIN.

Mvh

mattiasnordinMedlem sedan maj 20012 080 inlägg
#11

sql = "SELECT L.*, R.default_bild, R.bild_path FROM T_bilregistret L "
sql = sql & " LEFT OUTER JOIN T_bil_bilderna R ON L.id_nyckel = R.id_nyckel "
sql = sql & " WHERE R.default_bild ='ja'"

Returnerar fortfarande bara en träff. Men visst är det WHERE frågan som styr detta i mitt fall?

@ndersMedlem sedan juni 200032 969 inlägg
#12

Jag förstår inte riktigt.

Men prova att rycka bort WHERE-satsen, och se vad som händer.

mattiasnordinMedlem sedan maj 20012 080 inlägg
#13

T_bilregistret (L i frågan) ser ut så här:

id | id_nyckel | tillverkare | bilmarke | etc...

T_bil_bilder (R i frågan) ser ut så här:

id | id_nyckel | bild_path | default_bild | etc...

I denna lagras alla sökvägar till bilderna till en viss bil. De kan alltså finnas ca fyra bilar med samma id_nyckel i denna men det är bara en bild som har egenskapen default_bild (default_bild=ja).

Därför kan jag väl inte göra en vanlig join, denna returnerar väl bara en rad från tabellen med bilbilderna och det är inte säkert att det råkar vara den som har default bild = ja.

Kanske en dum databasdesign men nu blidde det såhär :(

Restultatet av att tabort WHERE = http://www.swesys.se/landrin/begagnade_bilar/begagnade_bilar_start.asp

@ndersMedlem sedan juni 200032 969 inlägg
#14

Det är nog ingen dum design. :)

Men; vad innehåller fälten id_nyckel i de två tabellerna? Borde inte villkoret vara L.id = R.id_nyckel?

mattiasnordinMedlem sedan maj 20012 080 inlägg
#15

I och med att det ska gå att skicka http länkar till denna sida med tex e-mail så ville jag att id fältet skulle vara slumpat så att det inte går att "fuska" genom att lägga på ett på befintligt id i url:en.
Så jag har slumpat fram id_nyckeln. Den är altså samma i båda tabellerna och ser ut så här: 7sTaAV

Tack för att du kämpar med mig denna ljuva söndag morgon (för mig. Barrunda igår)... ;)

mattiasnordinMedlem sedan maj 20012 080 inlägg
#16

BINGO...
Denna kod verkar fungera:

sql = "SELECT L.*, R.default_bild, R.bild_path FROM T_bilregistret L "
sql = sql & " LEFT OUTER JOIN T_bil_bilderna R ON (L.id_nyckel = R.id_nyckel AND R.default_bild ='ja') "

Hade det varit min ferarri så hade du fått den. Lovar!

@ndersMedlem sedan juni 200032 969 inlägg
#17

Att lägga villkoret där hade varit min nästa gissning. :)

Kul att det löste sig.

Hade det varit min ferarri så hade du fått den. Lovar!

Menar du inte Toyotan? ;)

mvh

mattiasnordinMedlem sedan maj 20012 080 inlägg
#18

Dom har faktiskt en ferrari i bilhallen. Hoppas att jag får provköra den nu när jag är så snäll och hjälper dem med siten ;)

Mera bilder på den här: http://www.bytbil.com/carinfo.cgi?id=B80AE27AB8B8EC&look=landrinavesta

Fel färg men annars en fantastisk bil...

TACK! Case closed.

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