【问题标题】:How to retrieve one particular record from a database without using cursors?如何在不使用游标的情况下从数据库中检索一条特定记录?
【发布时间】:2016-04-17 09:42:27
【问题描述】:

我的 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,但没有成功。

感谢您的帮助

【问题讨论】:

  • Otherwise, if the key is unique, I must select the row 其他情况呢?不是***的非唯一值?

标签: c# sql db2


【解决方案1】:

你的意思是像

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

我不确定 MIN,也许是 MAX,我手头没有 DB2 来检查 'A' 和 '*' 的顺序

编辑: 这仅在 '***' 是最小或最大可能值时才有效

【讨论】:

  • 做到了。非常感谢
【解决方案2】:

你可以这样做:

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

也就是说,您对其进行排序,以便将等于“***”的值推到底部,应用过滤并选择第一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2022-12-22
    • 2018-07-29
    • 2017-02-10
    • 2011-11-29
    • 2016-11-19
    • 2013-12-04
    相关资源
    最近更新 更多