代码之家  ›  专栏  ›  技术社区  ›  Craig Day

如何限制Ingres中任意查询的结果集大小?

  •  4
  • Craig Day  · 技术社区  · 16 年前

    在Oracle中,通过对“virtual”进行筛选,可以限制任意查询中返回的行数。 rownum 列。考虑下面的示例,它最多返回10行。

    SELECT * FROM all_tables WHERE rownum <= 10

    在Ingres中有没有一种简单、通用的方法来做类似的事情?

    4 回复  |  直到 9 年前
        1
  •  6
  •   Tnilsson    16 年前

    公然改变我的答案。”限制10“用于MySQL和其他,Ingres使用

    Select First 10 * from myTable
    

    Ref

        2
  •  2
  •   Craig Day    16 年前

    从MyTable限制10中选择*不起作用。

    发现了一个可能的解决方案:

        TIDs are "tuple identifiers" or row addresses.  The TID contains the
        page number and the index of the offset to the row relative to the
        page boundary.  TIDs are presently implemented as 4-byte integers.
        The TID uniquely identifies each row in a table.  Every row has a
        TID.  The high-order 23 bits of the TID are the page number of the page
        in which the row occurs.  The TID can be addressed in SQL by the name 
        `tid.'
    

    因此,可以使用如下方法限制返回的行数:

    select * from SomeTable where tid < 2048

    该方法返回的行数有点不精确。但对于我的需求来说这是可以的,因为我只想限制从一个非常大的结果集返回的行,以加速测试。

        3
  •  0
  •   Tnilsson    16 年前

    嘿,克雷格。对不起,我做了一个忍者剪辑。 不,限制10不起作用,我错认为它是每个人都支持的标准SQL。Ingres使用(根据Doc)“First”解决问题。

        4
  •  0
  •   Craig Day    16 年前

    嗨,斯德哥尔摩的忍者编辑!不用担心,已经证实“第一个X”工作得很好,比我想出的解决方案要好得多。谢谢你!