0

我需要将两个表绑定到一个数据集中。我有三个名为 Student、StudentMarks 的表。

在这里,如果我知道 studentId,我可以像这样查询学生表

DataSet ds=new DataSet();

SqlCommand cmd=new SqlCommand("
SELECT * 
FROM STUDENTS
WHERE STUDENTID=1; 
SELECT *
FROM STUDENTS
WHERE STUDENTID=1");

SqlDataAdapter da=new SqlDataAdapter(cmd);
da.Fill(ds);

像这样。这样我就可以访问这两个表,例如 ds.Table[0] 和 ds.Table[1]。

但我的问题是,如果我不知道 studentid,并且如果我想查询所有学生以及他们的分数,并且我必须在两个不同的表中获取这些详细信息,我该如何获取?

如果我加入这两个表,结果将在一个表中,我不知道该怎么做,有人可以帮我吗?提前致谢。

4

3 回答 3

2

试试这个;

SELECT
  s.*
FROM STUDENTS s
INNER JOIN StudentMarks m ON s.STUDENTID = m.STUDENTID ;

SELECT
  m.*
FROM STUDENTS s
INNER JOIN StudentMarks m ON s.STUDENTID = m.STUDENTID ;
于 2012-11-06T12:10:57.333 回答
1

我想查询所有学生以及他们的分数,我必须在两个不同的表中获取这些详细信息,我该如何获取?

为什么要在两个不同的表中获取两个不同表的详细信息?

您可以JOIN使用两张表,但这只会给您一组,如下所示:

SELECT
  s.*, 
  m.*
FROM STUDENTS s
INNER JOIN StudentMarks m ON s.STUDENTID = m.STUDENTID ;
-- You can add WHERE s.STUDENTID = 1 here as well; 

但是,您可以将这些连接的选择限制为s.*m.*

于 2012-11-06T12:08:01.353 回答
1

您可以使用DataTable.Select()方法来获取您需要的学生 ID 的行,如下所示:

for (int i = 0; i < ds.Tables[0].Rows.Count)
{
    int studentID = ds.Tables[0].Rows[i].Field<int>("StudentID");
    DataRow[] rows = ds.Tables[1].Select(string.Format("WHERE StudentID = {0}", studentID));
    //Do something with your mark rows here
}

或者您可以使用DataRelations定义数据集中的关系:

//Add a primary key to the student table so you can search on StudentID
ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns["StudentID"] };

//Add the relationship between "StudentID" columns in each table
ds.Relations.Add(ds.Tables[0].Columns["StudentID"], ds.Tables[1].Columns["StudentID"]);

//Check if the table contains the given StudentID
if (ds.Tables[0].Rows.Contains(studentID))
{
    //Get all child rows associated with this Student ID
    DataRow[] rows = ds.Tables[0].Rows.Find(studentID).GetChildRows();
}
于 2012-11-06T12:33:00.457 回答