Dadas as tabelas configuradas como esta
tableA {
id = 1
name = 'bob'
id = 2
name = 'sally'
id = 3
name = 'sue'
}
tableB {
id = 1
name = 'bob'
}
Se eu executar este comando, ele retornará os IDs 2 e 3, conforme desejado:
select id
from tableA a
left join tableB b using (id)
where id not in (select id from tableB)
order by id
limit 10;
Mas é uma tabela muito grande, então preciso usar offset. Quando tento o comando a seguir, nenhum resultado é retornado.
select id
from tableA a
left join tableB b using (id)
where id not in (select id from tableB)
order by id
limit 10 offset 10;
Existe uma maneira de usar offset quando uma junção está sendo usada?
O ambiente do processo não é visível, mas vou sugerir esta abordagem. Você processa linhas por lotes (limite de 10).
Com parâmetro @startId=0
Após o processamento do lote, use @startId como max(id) no lote processado e coloque como valor de parâmetro nenhuma próxima consulta - sem deslocamento.
Exemplo