Подзапрос Oracle не видит переменную из внешнего блока на 2 уровня выше

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

25
задан OMG Ponies 10 November 2010 в 03:14
поделиться

2 ответа

Нет, Oracle не коррелирует подзапросы, вложенные более чем на один уровень глубины (как и MySQL).

Это хорошо известная проблема.

Используйте это:

SELECT  p.post_id, c.*
FROM    posts
JOIN    (
        SELECT  c.*, ROW_NUMBER() OVER (PARTITION BY post_id ORDER BY created_date ASC) AS rn
        FROM    comments c
        ) c
ON      c.post_id = p.post_id
        AND rn = 1
46
ответ дан Quassnoi 10 November 2010 в 03:14
поделиться

Если вам нужен SQL, который является независимой платформой, это будет работать:

SELECT p.post_id
     , c.comment_body
  FROM posts p
     , comments c
 WHERE p.post_id = c.post_id
   AND c.created_date IN
       ( SELECT MIN(c2.created_date)
           FROM comments c2
          WHERE c2.post_id = p.post_id
        );

, но предполагает, что (post_id, cross_date) - основной ключ комментариев. Если это не так, вы собираетесь получить более одной строки, которые имеют комментарии с тем же Creduction_date.

Кроме того, вполне вероятно, будет медленнее, чем решение, которое использует аналитику, учитывая Quassnoi.

3
ответ дан 28 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

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