Как вывести последнюю запись при объединении таблиц?
Есть две таблицы:
Книга
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 |
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
Если книгу сдадут, и возьмут ещё раз, то появляется вторая запись этой книги:
Как выполнить запрос так, что бы для каждой книги бралась последняя запись из таблицы выдачи?
Дополнительно:
Так?
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; |
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;
- Да! Спасибо большое!
Ответы:
Так фильтруйте по ID.
Есть замечательная штука: DISTINCT
- Добавил DISTINCT к b.id, всё равно выводиться вторая запись книги, что я делаю не так?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для того чтобы вывести последнюю запись при объединении таблиц, можно воспользоваться подзапросом с помощью функции ORDER BY и LIMIT.
Пример запроса на языке SQL для вывода последней записи при объединении двух таблиц:
SELECT * FROM ( SELECT * FROM table1 UNION ALL SELECT * FROM table2 ) AS combined_tables ORDER BY id DESC LIMIT 1;
В данном примере мы объединяем две таблицы table1 и table2 с помощью UNION ALL, затем сортируем результат по полю id в обратном порядке (DESC) и ограничиваем вывод одной записью с помощью LIMIT 1.
Обратите внимание, что необходимо заменить table1 и table2 на реальные названия таблиц, а также указать поле, по которому нужно сортировать (в данном случае id).
Таким образом, данный запрос позволит вывести последнюю запись при объединении таблиц.