У меня есть оператор select, который поставляет неправильное количество строк.
Я могу воспроизвести проблему на Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
и на Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
Я не могу воспроизвести ее на Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
Testdata:
CREATE TABLE PERSON AS
SELECT LEVEL AS ID, 'Person_'||LEVEL AS NAME, 10 as maxVal
FROM DUAL
CONNECT BY LEVEL <= 5;
create table orders as
SELECT LEVEL AS ID, 'Order_'||LEVEL AS NAME
FROM DUAL
CONNECT BY LEVEL <= 3;
Если я попробую выполнить следующий запрос, я получаю только 3 результата вместо 5:
select p.*
from person p
where (maxVal - (select count(*)
from orders o
where o.id = p.id)
) > 0
Если я изменяю Query следующим образом, я получаю 5 результатов (что должно быть правильным номером):
select p.*
from person p
where (maxVal - (select count(*)
from orders o
where o.id = p.id)
) > 1
Также следующая модификация предоставляет правильный результат:
select p.*
from person p
where (maxVal - (select count(*)
from orders o
where o.id = p.id)
) > 0 + 0
Я также получаю правильное количество результатов, если я использую переменные Bind:
select p.*
from person p
where (maxVal - (select count(*)
from orders o
where o.id = p.id)
) > :num
Итак, есть ли (известная) ошибка, если я использую "больше 0"?