Нужно создать подзапрос, который отображает только один столбец MYSQL - PullRequest
0 голосов
/ 25 октября 2018

Эта база данных предназначена для системы книжных займов.Где, если студент берет копию книги, система принимает там номер студента и дает им дату возвращения для книги.Вот две таблицы, которые я использую

таблица займов:

 CREATE TABLE loan (
    `code` INT NOT NULL,
    `no` INT NOT NULL,
    taken DATE NOT NULL,
    due DATE NOT NULL,
    `return` DATE NULL,
    CONSTRAINT pri_loan PRIMARY KEY (taken),
    CONSTRAINT for_loan 
        FOREIGN KEY (`code`) REFERENCES copy (`code`),
        FOREIGN KEY (`no`) REFERENCES student (`no`));

таблица учеников:

CREATE TABLE student (
`no` INT NOT NULL,
`name` VARCHAR(30) NOT NULL,
school CHAR(3) NOT NULL,
embargo BIT NOT NULL,
CONSTRAINT pri_student PRIMARY KEY (`no`));

Во-первых, я рассчитываю рассчитать самую последнюю дату оплаты длякопия книги (она выведет код для этой книги и когда наступит последний срок для этой книги), что я и сделал, используя этот код, который отлично работал

SELECT `code`, max(due)
FROM loan
    GROUP BY `code`

Теперь я хочу изменить этот запростак что он выбирает самые поздние сроки исполнения для каждой книги, но отображает только номер студента (no), который имеет книгу.Для этого мне нужно использовать подзапрос, о котором я очень мало знаю, так как я только начинаю использовать MySQL.По сути, я не уверен, как создать этот подзапрос, и мне интересно, может ли кто-нибудь помочь мне, а также объяснить, а не просто показать мне код.

1 Ответ

0 голосов
/ 25 октября 2018

Вам нужен синтаксис HAVING:

SELECT
    `no` as student
FROM
    `loan`
GROUP BY
    `code`
HAVING
    DATETIME(`due`) = MAX(DATETIME(`due`));

HAVING позволяет добавить условие к оператору SELECT, которое ссылается и фильтрует по доступным значениям (включая выбранныестолбцы и их окончательные значения, которые могут быть очень полезны, если вы выполняете вычисления).

Подробнее см. здесь: https://www.guru99.com/group-by.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...