Enkel Inner join fråga
17 svar · 350 visningar · startad av mattiasnordin
SELECT R.*, B.bild FROM T_bilregistret R LEFT JOIN T_bil_bilderna B ON R.id_nyckel = B.id_nyckel
Mvh
Tack ska prova. Vad har R. & B. för funktion ???
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.
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 ?
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
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 ?
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
... 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.
??
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?
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
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)... ;)
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!
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
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.