Задать вопрос
@radmirb55

Как написать SELECT запрос c добавлением столбца?

Есть две таблицы:
Книга
id / название / описание

Выданные книги (выдача)
id_выдачи / id_книги / дата_выдачи / дата_возврата

Дата возврата книги заполняется только при сдаче книги, когда книга на руках - там NULL

Как мне вывести все книги с дополнительным столбцом, в котором будет писаться "Нет в наличии", если книга на выдаче (дата возврата = NULL)
и "В наличии", если книга сдана (дата_возврата заполнена) или ни разу не выдавалась (нет в таблице выдачи)?


Например:
6388728ce56b2457985671.png
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@rPman
читать про left join
условие на null - поле is null это для фильтрации или использовании в case ... then ..., еще есть функция nullif

либо в программе ноль проверяй средствами бакэнда или фронтэнда, это зависит от используемых языков ли фреймворков
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@VVitaly
IT специалист
CREATE TABLE tx.t1 (
id numeric NOT NULL,
"name" varchar NOT NULL,
"desc" varchar NOT NULL,
CONSTRAINT t1_pk PRIMARY KEY (id)
);

CREATE TABLE tx.t2 (
"inout" serial4 NOT NULL,
id numeric NULL,
out_id timestamp NOT NULL DEFAULT LOCALTIMESTAMP,
in_id timestamp NULL,
CONSTRAINT t2_check CHECK ((in_id > out_id)),
CONSTRAINT t2_pkey PRIMARY KEY ("inout"),
CONSTRAINT t2_id_fkey FOREIGN KEY (id) REFERENCES tx.t1(id)
);
CREATE UNIQUE INDEX unique_out ON tx.t2 USING btree (id, ((in_id IS NULL))) WHERE (in_id IS NULL);

select t1.id , name , descr , (case WHEN t2.out_id IS NULL then 'В наличии' else 'Нет в наличии' END) as exist from tx.t1 left JOIN tx.t2 on t1.id = t2.id order by 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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