希望创建一个只显示一列MYSQL的子查询



此数据库用于图书贷款系统。如果学生拿了一本书,系统会接受学生编号,并给他们一个归还日期。这是我使用的两张表

贷款表:

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。基本上,我不确定如何创建这个子查询,我想知道是否有人能帮助我,并解释它,而不仅仅是向我展示代码。

您要查找的是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

最新更新