2015-12-31 5 views
0

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

Я пытался использовать этот

Select * from emp where rownum between 0 and (Select count(*) from emp)/2; 

Мне нужно ваше предложение на лучший способ, чтобы прочитать следующую половину таблицы.

Я попытался

Select * from emp where rownum between ((Select count(*) from emp)/2)+1 and (Select count(*) from emp); 

, но он не давал мне результаты (дал мне пустой набор записей)

+1

это оракула или MySQL? mysql не имеет rownum .. также определить 'didnt дать мне результаты' – amdixon

+0

его Oracle, и он дал мне пустой набор записей. – Jeyaprakash

+0

какой версия вы используете.? –

ответ

0

rownum присваивается строкам после результат был неправдоподобным, так что вы не может использовать его так же, как вы. Вместо этого вы можете сделать что-то вроде:

select * 
    from (select rownum r, e.* from emp e) 
    where r between ((Select count(*) from emp)/2)+1 and (Select count(*) from emp); 
+0

Это не гарантирует, что одна и та же строка не будет загружена обоими приложениями. Строки должны быть упорядочены. – Husqvik

+0

Вот почему я написал «что-то вроде». ОП сам решит, как именно он будет заказывать записи. –

0

Вы можете также чередовать ряды

Если предположить последовательный ID:

App 1: Select * from emp where mod(emp_id, 2) = 0;

App 2: Select * from emp where mod(emp_id, 2) = 1;

или

Приложение 1:

WITH emp_ordered AS (Select * from emp order by emp_id) 
Select * FROM (Select emp.*, rownum rn from emp_ordered) where mod(rn, 2) = 0; 

App 2:

WITH emp_ordered AS (Select * from emp order by emp_id) 
Select * FROM (Select emp.*, rownum rn from emp_ordered) where mod(rn, 2) = 1; 
Смежные вопросы