Jag har en databas med två tabeller till mitt community. Tabell 1 tblUsers innehåller all grundläggande info om användaren och tabell 2 tblUsers_info innehåller presentation och bild på användaren. Båda tabellerna har en relation, userID till userID. Det jag vill är att kunna koppla rätt rad itabell 2 till rätt rad i tabell 1. Det vill säga, en bild och/eller presentation för användaren på rad 3 i andra tabellen ska läggas till i rad 3 på användaren i rad 1...rätt info till rätt person. I detta fall ser jag inget behov av en join. eftersom deras gemensamma nyckel, UserId är känd. När jag använder Set picture=objConn.Execute("SELECT tblUsers.*, tblUsers_info.* FROM tblUsers LEFT JOIN tblUsers_info ON tblUsers.userID = tblUsers_info.userID WHERE tblUsers.userID ="& UserId &"") Andreas kod fuck felmeddelande för att han (som felmeddelandet säger) glömt en " Vad är det för operator som saknas? Lite missvisande felmeddelande. Vad som saknas är ett värde efter likamed tecknet. Som sagt. Kontrollera att UserId innehåller ett tal. Tack för all hjälp, jag hade ju varit så blåst så att jag inte hade en join redan vid valideringen. Nu kan jag ha en session vid valideringen så att man kan rätt bild på sin egna sidaJoinsatser
Den SQL jag får från Access
SELECT tblUsers.userID, tblUsers_info.* FROM tblUsers INNER JOIN tblUsers_info ON tblUsers.userID = tblUsers_info.userID visar en bild, men det är samma bild för alla användare, så hur ska jag utforma WHERE-satsen???Sv: Joinsatser
Du hämtar bara informationen direkt från tblUsers_info tabellen:
<code>
strSQL = "SELECT tblUsers_info.*" & vbCrLf & _
"FROM tblUsers_info" & vbCrLf & _
"WHERE tblUsers_info.userID = " & UserId
</code>
Om du skall hämta informatione från bägge tabellen eller listar fler än en användare, har du nytta av en join:
<code>
strSQL = "SELECT tblUsers.*, tblUsers_info.*" & vbCrLf & _
"FROM tblUsers LEFT JOIN tblUsers_info ON tblUsers.userID = tblUsers_info.userID" & vbCrLf & _
"WHERE tblUsers.userID = " & UserId
</code>
Jag föredrar personligen Left Join före Inner join. Därför att en Left join tar med sig poster som saknar poster i joinad tabell.
Ofta är det så att man använder joins för att slå upp information. Jag vill t.ex. slå upp en kund från en order post. Det är nformationen i ordern jag är intreserad av. Men om ordern saknar kund. Kanske glömt ange en kund(tblOrder.OrderKundId = Null) eller så är kunden borttagen(värdet i tblOrder.OrderKundId motsvarar inte någon post i fältet KundId i tabellen tblKundermed).
En Inner join fråga kommer då inte retunera dessa ordrar. Vilket jag anser vara ett datamässigt fel.
Däremot retunerar en Left Join även dessa ordrar. Sv: Joinsatser
får jag
Microsoft JET Database Engine (0x80040E14)
Syntaxfel (operator saknas) i frågeuttrycket 'tblUsers.userID ='.
/Artiklar/Login/include/functions.asp, line 61
och med din kod får jag
Kompileringsfel i Microsoft VBScript (0x800A0409)
Oavslutad strängkonstant
/Artiklar/Login/include/functions.asp, line 62, column 19
"FROM tblUsers_infoSv: Joinsatser
Rätt ska vara:
<code>
strSQL = "SELECT tblUsers_info.*" & vbCrLf & _
"FROM tblUsers_info " & vbCrLf & _
"WHERE tblUsers_info.userID = " & UserId
</code>Sv: Joinsatser
Microsoft JET Database Engine (0x80040E14)
Syntaxfel (operator saknas) i frågeuttrycket 'tblUsers_info.userID ='.
/Artiklar/Login/include/functions.asp, line 61
när jag har
("SELECT tblUsers_info.*" & vbCrLf & _
"FROM tblUsers_info " & vbCrLf & _
"WHERE tblUsers_info.userID = " & UserId)Sv: Joinsatser
T.ex. :
<code>
Dim strSQL
Dim lngUserId
lngUserId = "" & Request.QueryString("UserId")
If IsNumeric(lngUserId) Then
lngUserId = CLng(lngUserId)
strSQL = "SELECT tblUsers.*, tblUsers_info.*" & vbCrLf & _
"FROM tblUsers LEFT JOIN tblUsers_info ON tblUsers.userID = tblUsers_info.userID" & vbCrLf & _
"WHERE tblUsers.userID = " & lngUserId
Else
Response.Write "Ange ett värde för parametern UserId. T.Ex. DinSida.ASP?UserId=123"
End If
</code>Sv: Joinsatser