如何在不使用游标的情况下从数据库中检索特定记录

本文关键字:数据库 检索 记录 情况下 游标 | 更新日期: 2024-09-26 00:56:49

我在DB2数据库的表中有以下记录:

num    f1     f2     f3
------------------------
***    e1     e2     e3
A      e1     e2     e3
***    e4     e5     e6

每一行的"键"(非主)由字段f1、f2和f3的组合组成。我必须按照以下规则获取行:如果一个键有多行,我必须选择字段"num"不包含值"***"的行。否则,如果键是唯一的,我必须选择行。

在我的例子中,我应该为密钥e1、e2、e3返回"A",为密钥e4、e5、e6返回"***"

我使用了一个临时表,在其中插入正确的行,同时使用光标读取主表。但它很慢,非常慢。

有没有办法只使用一个SQL查询来获得正确的记录,或者使用C#程序(我的应用程序使用的语言)?我试着玩Datatables和LINQ,但没有成功。

感谢您的帮助

如何在不使用游标的情况下从数据库中检索特定记录

你的意思是吗

SELECT MIN(num), f1, f2, f3 from myTable
group by f1, f2, f3

我不确定MIN,也许是MAX,我手头没有DB2来检查"A"answers"*"的排序

编辑:只有当"***"是最小或最大的值时,这才有效

您可以这样做:

SELECT TOP 1 * FROM 
myTable
ORDER BY CASE WHEN num = '***' THEN 1 ELSE 0 END    
WHERE f1 = something
AND f2 = something
AND f3 = something

也就是说,您对其进行排序,使等于"***"的值被推到底部,应用筛选,然后选择第一行。