gpt4 book ai didi

c# - 查询以根据此多个条件从表中选择值列表

转载 作者:行者123 更新时间:2023-11-29 05:41:05 25 4
gpt4 key购买 nike

我有一个包含 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 列表。选择的标准可以用这个伪代码更好地解释:SELECT such Ex_Ids FROM table Exercise_Term WHERE Ex_Id has all the corresponding Term_Ids in the lst_TermId

例如,从我上面提供的示例表中,

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]
}

查询部分是我的困惑。这种情况下的查询是什么样的?休息我可以管理。希望问题很清楚。谢谢..

最佳答案

SELECT Ex_ID 
FROM TableName
WHERE Term_ID IN (?, ?, ?) --- (2, 3, 4)
GROUP BY Ex_ID
HAVING COUNT(DISTINCT Term_ID) = 3 --- number of terms in the above list

如果组合 (Ex_ID, Term_ID) 在表中是唯一的,您可以将 COUNT(DISTINCT Term_ID) 替换为 COUNT(*)

这是一道关系除法题。 “标准”解决方案将使用两个底片(不存在):

SELECT DISTINCT Ex_ID
FROM TableName e
WHERE NOT EXISTS
( SELECT *
FROM TableName t
WHERE t.Term_ID IN (?, ?, ?) --- the list of terms
AND NOT EXISTS
( SELECT *
FROM TableName a
WHERE a.Term_ID = t.Term_ID
AND a.Ex_ID = e.Ex_ID
)
)

或者在你的情况下更好:

SELECT DISTINCT Ex_ID
FROM TableName e
WHERE NOT EXISTS
( SELECT *
FROM
( SELECT ? AS Term_ID
UNION
SELECT ?
UNION
SELECT ?
) AS t
WHERE NOT EXISTS
( SELECT *
FROM TableName a
WHERE a.Term_ID = t.Term_ID
AND a.Ex_ID = e.Ex_ID
)
)

关于c# - 查询以根据此多个条件从表中选择值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com