Этот вопрос связан с недавним ответом, который я предоставил здесь .
Настройка
Использование MS Access 2007.
Предположим, яиметь таблицу с именем mytable
, состоящую из трех полей:
id
Long Integer AutoNumber (PK) type
Text num
LongЦелое число
Со следующими примерами данных:
+----+------+-----+
| id | type | num |
+----+------+-----+
| 1 | A | 10 |
| 2 | A | 20 |
| 3 | A | 30 |
| 4 | B | 40 |
| 5 | B | 50 |
| 6 | B | 60 |
| 7 | C | 70 |
| 8 | C | 80 |
| 9 | C | 90 |
| 10 | D | 100 |
+----+------+-----+
Аналогично связанному ответу, скажем, я хочу вывести три поля с промежуточной суммой для каждого значения type
со значением промежуточного итога, ограниченным максимумом 100
, я мог бы использовать коррелированный подзапрос, такой как:
select q.* from
(
select t.id, t.type, t.num,
(
select sum(u.num)
from mytable u where u.type = t.type and u.id <= t.id
) as rt
from mytable t
) q
where q.rt < 100
. Это дает ожидаемый результат:
+----+------+-----+----+
| id | type | num | rt |
+----+------+-----+----+
| 1 | A | 10 | 10 |
| 2 | A | 20 | 30 |
| 3 | A | 30 | 60 |
| 4 | B | 40 | 40 |
| 5 | B | 50 | 90 |
| 7 | C | 70 | 70 |
+----+------+-----+----+
Наблюдение
Теперь предположим, что я хочу отфильтровать результат, чтобы показать только эти значения для type like "[AB]"
.
Если я использую один из следующих запросов:
select q.* from
(
select t.id, t.type, t.num,
(
select sum(u.num)
from mytable u where u.type = t.type and u.id <= t.id
) as rt
from mytable t
where t.type like "[AB]"
) q
where q.rt < 100
select q.* from
(
select t.id, t.type, t.num,
(
select sum(u.num)
from mytable u where u.type = t.type and u.id <= t.id
) as rt
from mytable t
) q
where q.rt < 100 and q.type like "[AB]"
Результаты фильтруются, как и ожидалось, но значения в столбце rt
(промежуточный итог) исчезают:
+----+------+-----+----+
| id | type | num | rt |
+----+------+-----+----+
| 1 | A | 10 | |
| 2 | A | 20 | |
| 3 | A | 30 | |
| 4 | B | 40 | |
| 5 | B | 50 | |
+----+------+-----+----+
Вопрос
Почему фильтр приведет к исчезновению значений, возвращенных коррелированным подзапросом?
Спасибо заВаше время, читая мой вопрос и заранее за любой совет, который вы можете предложить.