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") %>

那么,它是什么? UserAvatarAvatarURL ?

【讨论】:

它是 AvatarURL,UserAvatar 是 'cmets' 表中的一个单独字段,用于查找 'userprofiles' 表中的 'UserAvatar' 字段

以上是关于SQL JOIN + WHERE [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

`INNER JOIN` 过滤条件在查询中的位置; `ON` 或 `WHERE` 子句 [关闭]

SQL:内部 JOIN 语句没有给出正确的记录 [关闭]

SQL join 语句中“ON”字的语法无效[关闭]

访问 SQL 子查询 WHERE 子句不过滤结果 [关闭]

更新多个 WHERE SQL 不起作用 [关闭]

SQL:ORDER BY、AND、WHERE 返回布尔错误 [关闭]