【发布时间】:2022-01-28 11:22:43
【问题描述】:
我有一个简单的表格来存储师生关系,以显示学生在上课或老师在教谁。无论哪种方式。 (为便于阅读,按老师排序)
CREATE TABLE TS_RELATIONSHIP
(
Teacher NVARCHAR(10);
Student NVARCHAR(10);
)
例子:
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# 都可以。
非常感谢您的帮助!
【问题讨论】:
-
据我了解,您希望找到拥有相同学生的老师,反之亦然?
-
另外,您能否在问题中添加,具体希望收到的示例。
-
@kanils_ 是的。例如,输入:学生姓名列表(Casey、Gina、Ivan、Lin、Shawn),输出:Johnson。