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

qzwqbdag  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(395)

这个数据库是一个图书借阅系统。如果一个学生拿了一本书,系统会接受该学生的学号,并给出该书的归还日期。这是我正在用的两张table
贷款表:

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。基本上我不知道如何创建这个子查询,我想知道是否有人可以帮助我,也解释它不只是给我看代码。

mbskvtky

mbskvtky1#

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

相关问题