【问题标题】:Find previous & next entries in alphabetical index for a candidate在字母索引中查找候选人的上一个和下一个条目
【发布时间】:2011-08-05 19:12:40
【问题描述】:

在数据库中,我有一个字符串字段。我想按字母顺序查找不在数据库中的候选字符串的上一行和下一行。一种解决方案是将该候选对象临时插入数据库并在字段上执行 ORDER BY,但这会产生性能问题(在每次选择之前执行插入操作)。 你知道任何其他的方法来执行此操作吗?

谢谢

【问题讨论】:

    标签: sql sql-server database indexing alphabetical


    【解决方案1】:

    以下内容可能会给您一些指导。

    SELECT MAX(StringField)
    FROM   YourTable
    WHERE  StringField < Candidate
    UNION ALL
    SELECT MIN(StringField)
    FROM   YourTable
    WHERE  StringField > Candidate
    

    要检索整个记录(并假设您的 StringFields 是唯一的),您可以将其包装到子查询中。

    SELECT  *
    FROM    YourTable yt
            INNER JOIN (
              SELECT StringField = MAX(StringField)
              FROM   YourTable
              WHERE  StringField < Candidate
              UNION ALL
              SELECT MIN(StringField)
              FROM   YourTable
              WHERE  StringField > Candidate
            ) yts ON yts.StringField = yt.StringField
    

    注意:一种优化可能是对所有大写(或小写)字符进行比较,以便 Andy 和 ANDY 具有相同的权重。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多