Склейка с NULL: имя, ставшее пустотой
Склеиваете имя и фамилию для вывода на экран — обычная строка:
SELECT first || ' ' || last AS имя
FROM contacts;Часть строк в результате — пустые. Не «Клара», не «Клара (без фамилии)» — вообще ничего. Хотя имя first точно было записано.
«|| не молчит про пропуск вежливо. Он заражает пустотой всю склеенную строку целиком — одна дыра съедает весь текст рядом.»
Почему пустая фамилия съела и имя?
Если last — призрак (пустая графа: фамилию ещё не внесли), склейка с ним превращает весь результат в тот же призрак. Один пустой кусок в цепочке — и пропадает всё, что было слева и справа от него.
Лечение — заткнуть призрака прежде, чем он доберётся до склейки.
SELECT first || ' ' || COALESCE(last, '') AS имя
FROM contacts;
-- пустая фамилия больше не топит всё имя целиком«Проверяйте каждый кусок склейки на призрака заранее. Иначе одна пустая графа тихо стирает соседей, которые были в полном порядке.»
Имя, ставшее пустотой, — самая обидная из потерь: улика была, и её стёрли по дороге. В архиве это поправимо.