我需要将两个表绑定到数据集中。我有三张名为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]。
但我的问题是,如果我不了解学生,如果我想查询所有学生以及他们的分数,我可以在两个不同的表格中获取这些详细信息,我该如何获得?
如果我加入这两个表,结果将在一个表中,我不知道如何做到这一点,任何人都可以帮助我吗?提前谢谢。
答案 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();
}