SQL JOIN + WHERE [关闭]
Posted
技术标签:
【中文标题】SQL JOIN + WHERE [关闭]【英文标题】:SQL JOIN + WHERE [closed] 【发布时间】:2013-03-31 19:18:23 【问题描述】:您需要了解的背景: 我有两个表 - 一个名为“userprofiles”,一个名为“cmets” - 在“cmets”表中有一个名为“CommentUser”的查找字段,它链接到“userprofiles”中名为“TravellerName”的字段。
用户的头像图像路径(即 /Account/UserProfileAvatar/[TravellerName].jpg)可在名为“UserAvatar”的字段下的“userprofiles”表中找到。
gridview 本身使用带有 asp:Image 的 TemplateField,使用 Eval 和 Database 字段。我打算让 cmets 部分显示这 4 个数据字段:
-
用户头像
用户名('CommentUser')
标语
评论正文
我对第 2 到第 4 点很好,但第 1 点是你们进来的地方。
客户端代码如下所示:
<%-- Comments Box --%> <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="CommentsDataSource" Height="167px" Width="325px"> <Columns> <asp:TemplateField HeaderText="Comments"> <ItemTemplate> <div style="background-color:Silver"> <div class="avatar-frame"> <asp:Image runat="server" ImageUrl='<%# Eval("UserAvatar") %>'/> </div> <h1><%# Eval("TagLine")%></h1> <h2><%# Eval("CommentUser")%></h2> <p><%# Eval("CommentBody")%></p> </div> </ItemTemplate> <AlternatingItemTemplate> <div style="background-color:White"> <div class="avatar-frame"> <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("UserAvatar") %>'/> </div> <h1><%# Eval("TagLine")%></h1> <h2><%# Eval("CommentUser")%></h2> <p><%# Eval("CommentBody")%></p> </div> </AlternatingItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="CommentsDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:BookMeetConnString %>" ProviderName="<%$ ConnectionStrings:BookMeetConnString.ProviderName %>" SelectCommand="SELECT comments.CommentUser, comments.TagLine, comments.CommentBody, comments.BookID, userprofiles.TravellerName, userprofiles.AvatarURL FROM userprofiles INNER JOIN comments ON userprofiles.[TravellerName] = comments.[CommentUser] WHERE ([BookID]= ?)"> <SelectParameters> <asp:QueryStringParameter Name="?" QueryStringField="ID" /> </SelectParameters> </asp:SqlDataSource> <%-- End of Comments Box --%>
如您所见,我对查询进行了一些散列(我有一个粗略的想法,我需要做一个 JOIN,但我对 SQL 中的 JOIN 一无所知)。
我的查询的逻辑结构是这样的:
-
SELECT cmets.CommentUser, cmets.TagLine, cmets.CommentBody (这些是 cmets 表中需要的文本字段)
从“userprofiles”中为每个发表评论的用户检索 UserAvatar
仅显示该特定 bookid 的 cmets(SQL 查询的最后部分将是 WHERE ([BookID] = ?)
我希望你明白我所设想的查询是什么?
编辑:“BookID”的数据类型是访问查找(通过查找向导创建)。所有表都是通过 Microsoft Access 创建的。就字段的实际数据类型而言,据我所知,Access 会自动将“数字”数据类型分配给所有查找。查找查询本身是从“cmets”表中的“BookID”到“booklist”表中的“ID”。
【问题讨论】:
This 可以帮助您。 您遇到错误了吗?您应该提及“BookId”列所属的表名。 .. WHERE (TableName.[BookID]= ?) 如果您发布表的快照,我们会更容易理解这个问题 【参考方案1】:我不熟悉 ASP.Net 语法,但您实际提取的数据似乎有些混乱。
这是您的 SQL 查询:
SELECT comments.CommentUser,
comments.TagLine,
comments.CommentBody,
comments.BookID,
userprofiles.TravellerName,
userprofiles.AvatarURL
FROM userprofiles
INNER JOIN comments
ON userprofiles.[TravellerName] = comments.[CommentUser]
WHERE ([BookID] = ?)
然而,要获取头像 URL,您可以使用:
ImageUrl='<%# Eval("UserAvatar") %>
而不是:
ImageUrl='<%# Eval("AvatarURL") %>
那么,它是什么? UserAvatar
或 AvatarURL
?
【讨论】:
它是 AvatarURL,UserAvatar 是 'cmets' 表中的一个单独字段,用于查找 'userprofiles' 表中的 'UserAvatar' 字段以上是关于SQL JOIN + WHERE [关闭]的主要内容,如果未能解决你的问题,请参考以下文章