我是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" />
响应表可能会或可能不会有用户响应的记录,因此有可能是一个特定的用户ID没有记录。
无论如何,我必须在我的网格视图中显示COURSES表中的任何couseName,而不管它在RESPONSE表中的值如何。如果RESPONSE表没有该用户的记录,那么网格视图将仅显示空白或对dateTaken列表示“尚未采取”。如果RESPONSE表中没有记录,我上面的查询根本不显示任何内容。 请帮忙。
谢谢!
为什么where子句? – 2010-11-11 16:10:30
,因为他们在原来的查询中有?试图尽可能简单地将其放入。没有数据在我面前,并假设它有一些价值,而不是过滤器来模拟连接,我保留它。如果没有必要,OP可以删除它。 – 2010-11-11 16:18:12
感谢您的快速回复。还有一件事,RESPONSE表可能有重复的条目。我知道我可以使用DISTINCT,但那是整个表格。我如何使用RESPONSE表中的不同值,以便从RESPONSE中只选择一条记录。 – Ratan 2010-11-11 16:55:33