查询以根据多个条件从表中选择值列表
我有一个包含 2 列的表,Ex_Id 和 Term_Id,均为 int 类型。我的表将针对一个练习 ID 包含多个术语 ID。
Table would look like this:
Ex_Id Term_Id
1 2
1 3
1 4
1 5
2 2
3 2
3 4
等等。获取Ex_Id列表是首要要求。我的功能会是这样的。
List<int> Get_ExId_List(List<int> lst_TermId)
{
// return a list of Ex_Id <int>
}
也就是说,我将传递一个术语 ID 列表,并且需要获取一个与某些条件匹配的练习 ID 列表。选择的标准可以用以下伪代码更好地解释:从表Exercise_Term中选择这样的Ex_Ids,其中Ex_Id在lst_TermId中具有所有相应的Term_Id
例如,从我上面提供的示例表中,
List<int> Get_ExId_List([2])
{
// return [1,2,3]
}
List<int> Get_ExId_List([2,4])
{
// return [1,3]
}
List<int> Get_ExId_List([2,3,4])
{
// return [1]
}
查询部分是我的困惑。在这种情况下查询会是什么样的?休息我可以应付。希望问题很清楚。谢谢..
I have a table with 2 columns, Ex_Id and Term_Id, both int type. My table will have many Term Ids for one Exercise Id.
Table would look like this:
Ex_Id Term_Id
1 2
1 3
1 4
1 5
2 2
3 2
3 4
etc. Getting a list of Ex_Id is the primary requirement. My function would be like this.
List<int> Get_ExId_List(List<int> lst_TermId)
{
// return a list of Ex_Id <int>
}
That is, I'll be passing a list of Term Ids and I need to get a list of Exercise Ids back matching some criteria. The criteria to select can be better explained with this pseudo-code: SELECT such Ex_Ids FROM table Exercise_Term WHERE Ex_Id has all the corresponding Term_Ids in the lst_TermId
For eg, from the sample table I provided above,
List<int> Get_ExId_List([2])
{
// return [1,2,3]
}
List<int> Get_ExId_List([2,4])
{
// return [1,3]
}
List<int> Get_ExId_List([2,3,4])
{
// return [1]
}
Query part is my confusion. What would be the query in this condition like? Rest I can manage. Hope question is clear. Thanks..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果组合
(Ex_ID, Term_ID)
在表中是唯一的,您可以将COUNT(DISTINCT Term_ID)
替换为COUNT(*)
这是关系划分问题。 “标准”解决方案将使用两个否定(不存在):
或者在您的情况下更好:
If the combination
(Ex_ID, Term_ID)
is unique in the table, you can replaceCOUNT(DISTINCT Term_ID)
withCOUNT(*)
This is a relational division problem. The "standard" solution would be using two negatives (NOT EXISTS):
or better in your case:
您可以使用 LINQ。将整个表放入某种类型的 IEnumerable 中,然后使用 LINQ。
下面是一个示例:
请注意,如果您的 lst_TermId 是
HashSet
,您将获得更好的性能,因为 contains 方法将是O(1)
而不是 <代码>O(n)。You can use LINQ. Get the whole table into an IEnumerable of some sort and then use LINQ.
Here is an example:
Note that you'll get better performance if your lst_TermId is a
HashSet<int>
, because the contains method will beO(1)
instead ofO(n)
.