Подзапрос вернул более одного значения, =,! =, <, <=,>,> = - PullRequest
0 голосов
/ 03 апреля 2019

Реализация подзапроса в запросе, который возвращает последнее удаление ссуды DVD с использованием max (dateOut).

Запрос дает правильный результат в таблице ссуд, однако при попытке реализовать в качестве подзапроса выдает ошибку, есть идеи, что нужно сделать?Максимальный (dateout) раздел.При тестировании ошибка показана ниже.

SELECT 
    DVDTitle.DVDTitle, 
    Loan.LoanNumber, 
    Member.MemberNumber, 
    Member.MemberFirstName, 
    Member.MemberLastName, 
    (SELECT max(DateOut) FROM Loan, DVDCopy GROUP BY DVDCopy.CopyNumber), 
    Loan.DateDue, Loan.DateReturned
FROM 
    DVDCopy 
INNER JOIN 
    Loan 
    ON DVDCopy.CopyNumber = Loan.CopyNumber 
INNER JOIN 
    Member 
    ON Loan.MemberNumber = Member.MemberNumber 
INNER JOIN 
    DVDTitle 
    ON DVDCopy.DVDNumber = DVDTitle.DVDNumber
WHERE  
    (DVDCopy.CopyNumber = @CopyNumber) 

Ошибка:

Произошла ошибка при выполнении запроса.Пожалуйста, проверьте синтаксис команды и, если таковые имеются, типы и значения параметров и убедитесь, что они верны.Подзапрос вернул более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Ожидаемый результат должен возвращать последний заем определенного DVD на основе номера копии из таблицы ссуд и таблицы DVD Copy в виде сетки на основе раскрывающегося списка (здесь выбран номер копии),Любые идеи, спасибо.

1 Ответ

0 голосов
/ 04 апреля 2019

Как насчет перемещения вашего подзапроса в SELECT в INNER JOIN:

SELECT 
    DVDTitle.DVDTitle, 
    Loan.LoanNumber, 
    Member.MemberNumber, 
    Member.MemberFirstName, 
    Member.MemberLastName, 
    mdo.MaxDateOut, 
    Loan.DateDue, Loan.DateReturned
FROM 
    DVDCopy 
INNER JOIN 
    Loan 
    ON DVDCopy.CopyNumber = Loan.CopyNumber 
INNER JOIN 
    Member 
    ON Loan.MemberNumber = Member.MemberNumber 
INNER JOIN 
    DVDTitle 
    ON DVDCopy.DVDNumber = DVDTitle.DVDNumber
INNER JOIN
(SELECT CopyNumber,max(DateOut) as "MaxDateOut" FROM Loan, DVDCopy GROUP BY DVDCopy.CopyNumber) mdo 
    ON DVDCopy.CopyNumber = mdo.CopyNumber
WHERE  
    (DVDCopy.CopyNumber = @CopyNumber) 
...