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

Как вывести последнюю запись при объединении таблиц?

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

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

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

Выполняю запрос с дополнительным столбцом, в котором будет писаться "Нет в наличии", если книга на выдаче (дата возврата = NULL)
и "В наличии", если книга сдана (дата возврата заполнена) или ни разу не выдавалась (нет в таблице выдачи)
SELECT b.id, b.title, 
	CASE WHEN b.id NOT IN (SELECT ib.book_id FROM issued_book ib) 
	OR (b.id IN (SELECT ib.book_id FROM issued_book ib) AND ib.date_return IS NOT NULL) THEN 'В наличии' 
	ELSE 'Нет в наличии' 
	END AS Наличие
FROM book b
LEFT JOIN issued_book ib ON ib.book_id = b.id

Если книгу сдадут, и возьмут ещё раз, то появляется вторая запись этой книги:
638db3b34b834087401024.png
Как выполнить запрос так, что бы для каждой книги бралась последняя запись из таблицы выдачи?
  • Вопрос задан
  • 181 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
Так?
SELECT b.id, b.title, 
  CASE WHEN exists (SELECT ib.book_id FROM issued_book ib where ib.book_id = b.id AND ib.date_return IS NULL) 
  THEN 'Нет в наличии' 
  ELSE 'В наличии' 
  END AS Наличие
FROM book b;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ZERGeich
@ZERGeich
Так фильтруйте по ID.
Есть замечательная штука: DISTINCT
Ответ написан
Ваш ответ на вопрос

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

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