我有两张桌子
tblstudent (StudentID (PK), StudentNumber, Name & Surname)
和
tblfingerprint (ID (PK), StudentID (FK), Template)
我有一个Web服务,可以根据ID来选择模板。不过,我希望能够根据tblFingerprint
中的StudentNumber
而不是StudentID
中的tblStudent
来选择leftjoin or innerjoin?
模板。
到目前为止,我有以下代码。我不确定是否需要使用[WebMethod]
public Verification StuVerification(Student student)
{
cn.Open();
SqlCommand com = new SqlCommand("SELECT Template FROM tblFingerprint WHERE ID = '"+ student.StudentNumber + "'", cn);
//SqlCommand com = new SqlCommand("SELECT Template FROM tblFingerprint WHERE ID = '" + ID + "'", cn);
//com.Parameters.AddWithValue("@Template", Template);
SqlDataReader sr = com.ExecuteReader();
while (sr.Read())
{
Verification verification = new Verification()
{
StudentID = sr.GetInt32(0),
StudentNumber = sr.GetString(1),
Name = sr.GetString(2),
Surname = sr.GetString(3),
};
cn.Close();
return verification;
}
cn.Close();
return new Verification();
}
{{1}}
答案 0 :(得分:1)
在两个表之间使用内部联接,但通常使用参数化查询
string cmdText = @"SELECT s.StudentID, s.StudentNumber, s.Name, s.Surname, f.Template
FROM tblStudent s INNER JOIN tblFingerprint f
ON t.StudentID = f.StudentID
WHERE s.StudentNumber = @numb";
SqlCommand com = new SqlCommand(cmdText, cn);
com.Parameters.AddWithValue("@numb", student.StudentNumber);
在INNER JOIN中,仅返回第二个表上具有相应记录的第一个表的记录(在您的情况下,只有在tblFingerprint表中具有相应记录的学生)
在LEFT JOIN中,返回第一个表的每个记录以及第二个表的相应值。如果任何学生在tblFingerprint中没有记录,则模板字段将为空
另请注意,您尝试从datareader中读取4个字段,但实际查询仅包含“模板”字段。因此,我在您的查询中添加了缺少的字段
答案 1 :(得分:0)
首先,如果您对自己进行了一些搜索,您会发现数千页有相关信息。
OT:你可以加入表格
SELECT Template FROM tblFingerprint WHERE ID = '"+ student.StudentNumber + "'
SELECT Template
FROM tblFingerprint F
INNER JOIN tblStudent S
ON F.StudentID = S.StudentID
WHERE S.StudentNumber = '"+ student.StudentNumber + "'"
提示:使用参数,在此示例中存在SQL注入的主要风险
答案 2 :(得分:0)
JOIN相当于SQL Server上的INNER JOIN,所以只需使用以下内容即可。我已经在表名中添加了别名,以减少它的冗长。
我基于你的例子,所以我必须假设StudentNumber是一个字符串字段。如果没有,那么只需从查询中删除字符串分隔符。
"SELECT Template FROM tblFingerprint fp
JOIN tblstudent s ON fp.StudentID = s.StudentID
WHERE s.StudentNumber = '"+ student.StudentNumber + "'"
希望这会有所帮助。 人