Склейка с NULL: имя, ставшее пустотой

Склеиваете имя и фамилию для вывода на экран — обычная строка:

SELECT first || ' ' || last AS имя
FROM contacts;

Часть строк в результате — пустые. Не «Клара», не «Клара (без фамилии)» — вообще ничего. Хотя имя first точно было записано.

«|| не молчит про пропуск вежливо. Он заражает пустотой всю склеенную строку целиком — одна дыра съедает весь текст рядом.»

Почему пустая фамилия съела и имя?

Если last — призрак (пустая графа: фамилию ещё не внесли), склейка с ним превращает весь результат в тот же призрак. Один пустой кусок в цепочке — и пропадает всё, что было слева и справа от него.

Лечение — заткнуть призрака прежде, чем он доберётся до склейки.

SELECT first || ' ' || COALESCE(last, '') AS имя
FROM contacts;
-- пустая фамилия больше не топит всё имя целиком
«Проверяйте каждый кусок склейки на призрака заранее. Иначе одна пустая графа тихо стирает соседей, которые были в полном порядке.»

Имя, ставшее пустотой, — самая обидная из потерь: улика была, и её стёрли по дороге. В архиве это поправимо.

$0
тащи карточки за верхнюю кромку · «+ стикер» · «🧵 нить» — клик по двум

ЛОТОК УЛИК

во вкладке SQL найди подозреваемых и жми «+ доска»

НА ПРОВЕРКУ

теории из «Заметок» отправляются сюда — подтверди на доске или удали
Ctrl+Enter · «+ доска» на строке — выбрать поля и перенестипиши запрос, я подожду
Результат появится здесь.

Картотека

Заметки

Факты

Теории на проверку

Подсказки

◆ РЕЖИМ АРХИВАРИУСАуправление картотекой дел · не виден игроку