我有一个简单的表来存储师生关系,以显示学生正在上谁的课或老师正在教谁。无论哪种方式。 (为便于阅读,按老师排序)
CREATE TABLE TS_RELATIONSHIP
(
Teacher NVARCHAR(10);
Student NVARCHAR(10);
)
Example:
Teacher Student
-------------------
Conner Yumi
Conner Shawn
Conner Casey
Ericson Eric
Ericson Yumi
Ericson Sue
Ericson Lin
Johnson Shawn
Johnson Lin
Johnson Ivan
Johnson Casey
Johnson Gina
现在,如果我有一组学生姓名,如何找到数据的“完全匹配”? (顺序无关紧要)
例如,如果学生姓名集是Casey, Gina, Ivan, Lin, Shawn
,那么我知道Johnson
是我要找的老师,除了这五个人(正是这五个人,没有一个学生少或更多),什么都不会返回(除非其他老师得到了完全匹配)。
我尝试在 C# 的帮助下做到这一点,并做了类似的事情,
string[] studentNames;
DataTable dt = SQL.GetDT(@"SELECT Teacher FROM [TS_RELATIONSHIP] WHERE Student=@p0;",studentNames[0]); //Assuming SQL.GetDT is a function that execute the T-SQL and return it as a DataTable.
for(int i=1;i<studentNames.Length;i++)
{
string teacherNames = string.Join(",", dt.AsEnumerable().Select(x => string.Format($"'{x.Field<string>("Teacher")}'")));
dt=SQL.GetDT(@"SELECT Teacher FROM [TS_RELATIONSHIP] WHERE Student=@p0 and Teacher IN (@p1);",studentNames[i], teacherNames);
}
但很快就会发现这个方法不会返回“精确”匹配!
只要老师“包含”学生列表,它就会作为答案返回(这是不正确的)。
有人能好心教我如何正确地做吗?
无论是使用纯 T-SQL 还是借助 C# 都可以。
非常感谢您的帮助!