寻找创建仅显示一列MYSQL的子查询

时间:2018-10-25 15:17:37

标签: mysql subquery groupwise-maximum

此数据库用于图书借阅系统。如果学生拿到一本书的副本,系统会在那儿接受学生编号并给他们一个书的归还日期。这是我正在使用的两个表

贷款表:

 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 :(得分:0)

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