从多个表中选择值

时间:2010-11-11 15:53:47

标签: c# asp.net sql gridview silverlight-4.0

我是sql的新手,所以请在这里忍受我。 我有两个表,COURSES和RESPONSES,它们有一个共同的字段userID。我正在创建一个网格视图,显示COURSES表中的每个用户可用的courseName和RESPONSE表中的dateTaken。所以我只是将查询写成:

SELECT c.*, r.*
FROM COURSES c, RESPONSE r
WHERE c.userID = @userID1 and r.userID = @userID1 and r.userResponse = NULL

<SelectParameters>
    <asp:Parameter Name="userID1" Type="Int32" />
</SelectParameters>
<asp:GridView
            ID                      ="gvAvailCourses"
            runat                   ="server"
            DataSourceID            ="sdsAvailCourses"
            Width                   ="100%"
            DataKeyNames            ="trainingCourseID"
            PageSize                ="10"
            AllowPaging             ="true"
            EnablePersistedSelection="true"
            OnRowCommand            ="gvAvailCourses_RowCommand"
            AutoGenerateColumns     ="false">


            <Columns>

                <asp:BoundField DataField="trainingCourseID" HeaderText="Coursen ID" />
                <asp:ButtonField ButtonType="Link" DataTextField="CourseName" CommandName="CourseName" HeaderText="Course Name" />
                <asp:BoundField DataField="dateEntered" HeaderText="Last Taken" />

RESPONSE表可能有也可能没有用户响应的记录,因此可能没有特定用户ID的记录。

在任何情况下,我都必须在我的网格视图中显示COURSES表中的任何couseName,而不管它在RESPONSE表中的值。如果RESPONSE表没有该用户的记录,那么网格视图将只显示空白或为dateTaken列显示“Not Taken Yet”。如果RESPONSE表中没有记录,我上面的查询根本不显示任何内容。 请帮忙。

谢谢!

2 个答案:

答案 0 :(得分:1)

您所描述的是从课程到回复的左连接。给出所有课程,如果在那里显示相关的响应,否则为null

SELECT c.*, r.*
FROM COURSES c LEFT JOIN RESPONSE r
ON c.userID = r.userID

答案 1 :(得分:1)

您正在寻找的是LEFT OUTER JOIN。如果存在信息,这允许第二个表包含在查询中,否则引用的列将返回NULL值。

SELECT          c.*, r.*
FROM COURSES    c
  LEFT JOIN     RESPONSE r
  ON            r.userID = c.userID
WHERE           r.userResponse = NULL

检查内部连接和左/右修改器。