0

2つのテーブルをデータセットにバインドする必要があります。Student、StudentMarksという名前の3つのテーブルがあります。

ここで、studentIdがわかっている場合は、次のようにstudentテーブルにクエリを実行できます。

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]のようなこれら2つのテーブルにアクセスできます。

しかし、私の質問は、studentidがわからない場合、およびすべての学生とそのマークを照会したい場合、これらの詳細を2つの異なるテーブルで取得する必要がある場合、どうすれば取得できますか?

これらの2つのテーブルを結合すると、結果は1つのテーブルになります。これを行う方法がわかりません。誰かがここで私を助けてくれますか?前もって感謝します。

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

すべての生徒とその点数をクエリしたいのですが、これらの詳細を2つの異なるテーブルで取得する必要があります。どうすれば取得できますか?

2つの異なるテーブルの2つの異なるテーブルの詳細を取得したいのはなぜですか?

2つのテーブルを使用できますがJOIN、次のように1つのセットしか提供されません。

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 に答える