0

このデータベースは図書貸出システム用です。学生が本のコピーを取ると、システムはそこで学生番号を受け入れ、本の返却日を与えます。これらは私が使用している2つのテーブルです

ローン表:

 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 を使い始めたばかりなので、ほとんど知らないサブクエリを使用する必要があります。基本的に、このサブクエリを作成する方法がわからないので、コードを表示するだけでなく、誰かが私を助けて説明してくれるかどうか疑問に思っています。

4

1 に答える 1

0

あなたが探しているのはHAVING構文です:

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

HAVINGSELECT使用可能な値 (選択した列とその最終値を含む。計算を行う場合に非常に便利です) を参照してフィルター処理するステートメントに条件を追加できます。

詳細については、こちらをご覧ください: https://www.guru99.com/group-by.html

于 2018-10-25T17:10:12.433 に答える