使用first的结果查询第二个表

时间:2012-11-06 12:04:13

标签: sql sql-server-2008

我需要将两个表绑定到数据集中。我有三张名为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]。

但我的问题是,如果我不了解学生,如果我想查询所有学生以及他们的分数,我可以在两个不同的表格中获取这些详细信息,我该如何获得?

如果我加入这两个表,结果将在一个表中,我不知道如何做到这一点,任何人都可以帮助我吗?提前谢谢。

3 个答案:

答案 0 :(得分: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 ;

答案 1 :(得分: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.*

答案 2 :(得分: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();
}