На вид ненужный случай в алгоритме объединения в SICP

Аналитическое решение только с одним вложенным запросом:

SELECT * FROM
(
   SELECT t.*, Row_Number() OVER (ORDER BY name) MyRow FROM sometable t
) 
WHERE MyRow BETWEEN 10 AND 20;

Rank() мог быть заменен Row_Number(), но мог бы возвратить больше записей, чем Вы ожидаете, существуют ли дублирующиеся значения для имени.

13
задан Paul Hollingsworth 5 August 2009 в 00:04
поделиться

2 ответа

Хороший вопрос!

Думаю, причина в том, что вы не хотите использовать круговые привязки, такие как {? X =? Y,? Y = ? x} . В частности, объединение (? X? Y) с (? Y? X) даст вам круглую рамку выше, если вы пропустите проверку. С проверкой вы получите фрейм {? X =? Y}, как и ожидалось.

Круговые привязки в фрейме плохи, потому что они могут вызвать функции, выполняющие подстановки с использованием фрейма, такие как instantiate , для запуска в бесконечном цикле.

5
ответ дан 2 December 2019 в 02:05
поделиться

Без него вы бы не получили самый общий объединитель . Еще предстоит поработать: объединить x и y.

0
ответ дан 2 December 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: