如何在ASE 12.5中选择LIMIT? LIMIT 10,10给出了语法错误?

时间:2015-07-18 22:54:37

标签: sybase sybase-ase

如何LIMIT Adaptive Server IQ / 12.5.0 / 0306中的查询返回的结果?

以下是LIMIT附近的一般错误:

SELECT * FROM mytable LIMIT 10, 10;

知道为什么吗?这是我第一次使用这个dbms

2 个答案:

答案 0 :(得分:0)

Sybase IQ使用 row_count 来限制返回的行数。

您必须在语句的开头设置行计数,并确定该语句是否应为TEMPORARY。

ROW_COUNT SET options

答案 1 :(得分:0)

Sybase IQ 12不支持

public void navigateFragment(String tag, Fragment fragment, boolean shouldAdd) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); if (shouldAdd) mStacks.get(tag).push(fragment); // push fragment on stack if (mCurrentFragment != null) { saveFragmentState(mCurrentFragment.getClass().getName(), mCurrentFragment); } mCurrentFragment = fragment; restoreFragmentState(fragment.getClass().getName(), fragment); ft.replace(android.R.id.tabcontent, fragment); ft.commit(); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); Bundle fragmentStates = new Bundle(mFragmentStates.size()); for (Map.Entry<String, Fragment.SavedState> entry : mFragmentStates.entrySet()) { fragmentStates.putParcelable(entry.getKey(), entry.getValue()); } outState.putParcelable(KEY_FRAGMENT_STATES, fragmentStates); } private void saveFragmentState(String id, Fragment fragment) { Fragment.SavedState fragmentState = getSupportFragmentManager().saveFragmentInstanceState(fragment); mFragmentStates.put(id, fragmentState); } private void restoreFragmentState(String id, Fragment fragment) { Fragment.SavedState fragmentState = mFragmentStates.remove(id); if (fragmentState != null) { if (!fragment.isAdded()) fragment.setInitialSavedState(fragmentState); } } 语句。我认为没有简单或干净的解决方案,类似于旧的SQL Server。但是有些approches适用于SQL Server 2000,也适用于Sybase IQ 12.我不承诺下面的查询可以用于复制和粘贴。

<强>子查询

LIMIT

基本上,它会获取10行,但也会跳过前10行。为了实现这一点,行必须是唯一的,并且排序很重要。我不能在结果中多次出现。否则,您可以过滤掉有效的行。

Asc-Desc

另一种解决方法取决于订购。它使用排序并为第二页提取10行,你必须处理最后一页(它不能正常使用简单的公式页*每页行数。)

SELECT TOP 10 *
FROM mytable
WHERE Id NOT IN (
    SELECT TOP 10 Id FROM mytable ORDER BY OrderingColumn
)
ORDER BY OrderingColumn

我在ASE 12的FROM语句中找到了一些关于非工作子查询的信息。这种方法可能无法实现。

基本迭代

在这种情况下,您可以遍历行。假设第十行的id是15.然后它将在第十行之后选择接下来的10行。如果您要通过另一列而不是Id订购,则会发生错误。这是不可能的。

SELECT *
FROM
(
    SELECT TOP 10 *
    FROM
    (
        SELECT TOP 20 * -- (page * rows per page)
        FROM mytable
        ORDER BY Id
    ) AS t1
    ORDER BY Id DESC
) AS t2
ORDER BY Id ASC

以下是有关SQL Server 2000中另一个变通方法的文章。在Sybase IQ 12中,某些变通方法也应该以类似的方式工作。 http://www.codeproject.com/Articles/6936/Paging-of-Large-Resultsets-in-ASP-NET

所有这些都是解决方法。如果您可以尝试在较新版本上迁移。