2013-05-30 1 views
1

Есть ли решение, совместимое с Oracle и MySql, чтобы ограничить количество строк, возвращаемых запросом?Решение Совместимое Oracle и MySQL для предложения LIMIT

Например, в MySQL есть пункт Нт

SELECT * FROM myTable LIMT 10;

В Oracle мы используем условие на колонке RowNum

Я хочу, чтобы какой-то код, который работает как для MySQL и Oracle

ответ

0

in oracle is is

select * from mytable where rownum < 11 

Альтернатива - это аналитическая функция, но mysql не поддерживает это.

+0

Я считаю, что @ abderrahim_05 нужен SQL, который работает с обоими из них без каких-либо изменений. – invisal

+0

Ну, я работаю над приложением, которое должно работать как для Oracle, так и для MySQL. –

+0

Мне нужен некоторый запрос, который работает на обеих СУБД –

0

Предполагая, что есть идеальные авто-increasement (номер не пропускаются) поле и никакого другое условие

Чтобы получить последние 5 записей

SELECT * FROM account 
HAVING (SELECT MAX(id) FROM account) - 5 < id 

Чтобы получить первые 5 записей

SELECT * FROM account 
HAVING (SELECT MIN(id) FROM account) + 5 > id 
1

Если таблица имеет уникальный столбец идентификатора (или комбинацию столбцов), вы можете сделать следующее:

select t.* 
from t 
where (select count(*) from t t2 where t2.id <= t.id) <= 10; 

Корреляционный подзапрос в предложении where является стандартным синтаксисом SQL, поэтому он должен работать в любой базе данных.

Производительность должна быть хорошо на небольших столиках. Он будет улучшен с индексом на t(id).

0

Мне не известно о решении без слоя абстракции базы данных, особенно если это решение необходимо выполнить.

Даже если вы нашли решение по этой конкретной проблеме, возникли бы еще 99 проблем по пути к переносимости базы данных. Я опубликовал свой опыт в ответе на аналогичный вопрос here

Хорошей новостью для этой конкретной проблемы является то, что для DB2, PostgreSql, Oracle и MySql вы можете просто обернуть/расширить запрос, чтобы стать запросом с лимитом. Но вам нужно обращаться с этим где-то в своем приложении.

Смежные вопросы