Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Нет, 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
Если вам нужен 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.