Я бы сначала избавился от этих подразумеваемых объединений. Тогда я бы использовал производную таблицу вместо коррелированного подзапроса (Никогда не используйте коррелированный подзапрос, поскольку они являются собаками производительности!)
SELECT
CASE b.ON_LOAN
WHEN 'Y' THEN 'In Lib'
WHEN 'N' THEN c.duedate END
AS Availability,
a1.isbn,
a.class_number
FROM book_copy b
JOIN book A1
ON a1.isbn = b.isbn
JOIN (SELECT MIN(c.duedate), c.isbn FROM loan c
join book a
on a.a.isbn = c.isbn
WHERE a.isbn = 123456 AND datereturned is null
GROUP BY c.isbn
) c
ON a1.isbn = c.isbn
WHERE a.isbn = 123456
Изначально я использовал max, потому что вы не дали нам никаких указаний на то, как выбирать, какие записи в таблице ссуд выбрать, когда вы хотите только одну. Тем не менее, я подозреваю, что есть лучший способ (или, по крайней мере, я надеюсь, что у вашего дизайна есть лучший способ) найти книгу, которая уже вышла. Возможно, у вас есть поле, которое указывает, что книга была возвращена, или, возможно, вы хотите, чтобы была возвращена дата первой доступной книги, а не самая последняя дата. Не используйте Макс, не думая о том, как получить только одну запись. В противном случае вы можете написать запрос, который работает, но он неверен в своих результатах. На основании вашего комментария ниже я пересмотрел запрос.
Ключ к пониманию этого заключается в том, что производная таблица должна возвращать запись, которая еще не была возвращена, но которая должна быть доступна в ближайшее время (т.е. она имеет самую раннюю дату исполнения). Если мой запрос не делает этого, то вам нужно будет поэкспериментировать, пока вы не найдете тот, который делает. Заключительный пункт, где может или не может быть необходимым, вы должны проверить это также. Это зависит от того, являются ли номера книг уникальными или повторяются ли они для разных книг.