【发布时间】:2019-10-01 05:39:25
【问题描述】:
我的问题是找到 John Smith 当前正在借阅的所有图书的图书 ID、书名和到期日期。
这是架构:
- 图书(bookID (PK)、ISBN、书名、作者、出版年份、类别)
- 成员(memberID (PK)、姓氏、名字、地址、电话号码、限制)
- CurrentLoan(memberID (PK)、bookID (PK)、贷款日期、到期日)
- 历史记录(memberID (PK)、bookID (PK)、借出日期 (PK)、归还日期)
会员可以从图书馆借书。他们可以借书的数量受成员关系的“限制”字段的限制(不同的成员可能会有所不同)。书籍的类别包括小说、非小说、儿童和参考书。 CurrentLoan 表表示有关当前已签出的书籍的信息。当图书归还图书馆时,该记录将从 CurrentLoad 关系中删除,并以归还日期插入到 History 关系中。一个图书馆可能拥有同一本书的多个副本,在这种情况下,每个副本都有自己的 bookID,但所有副本共享相同的 ISBN。
CREATE TABLE Book
(
bookID INT NOT NULL,
ISBN INT NOT NULL,
title VARCHAR NOT NULL,
Author CHAR,
publish_year INT,
category VARCHAR,
PRIMARY KEY (bookID)
);
CREATE TABLE Member_
(
memberID INT NOT NULL,
lastname CHAR NOT NULL,
firstname CHAR NOT NULL,
address_ VARCHAR,
phone_number INT,
limit_ INT,
PRIMARY KEY (memberID, lastname, firstname)
);
CREATE TABLE CurrentLoan
(
memberID INT NOT NULL,
bookID INT NOT NULL,
loan_date DATE,
due_date DATE,
PRIMARY KEY (memberID, bookID),
FOREIGN KEY (bookID) REFERENCES Book(bookID)
);
CREATE TABLE History
(
memberID INT NOT NULL,
bookID INT NOT NULL,
loan_date DATE NOT NULL,
return_date DATE,
PRIMARY KEY (memberID, bookID, loan_date),
FOREIGN KEY (bookID) REFERENCES Book(bookID),
FOREIGN KEY (memberID) REFERENCES Member_(memberID)
);
INSERT INTO Member_
VALUES (1001, 'Smith', 'John', 'Captial road', 9195863230, 10);
INSERT INTO Member_
VALUES (2123, 'Sacks', 'Mark', '7th Black Street', 9195627774, 10);
INSERT INTO Member_
VALUES (3456, 'Johnson', 'Susan', '405 South', 9198564325, 10);
INSERT INTO Member_
VALUES (4223, 'States', 'Nick', '12th East Street', 9198889999, 10);
INSERT INTO Member_
VALUES (5987, 'Stew', 'Martha', '85 North', 9193642256, 10);
INSERT INTO Book
VALUES (0001, 444222666325, 'Mars', 'Mark Sas', 2001, 'fiction');
INSERT INTO Book
VALUES (0002, 784566512135, 'The Cow', 'Stephy Williams', 1996, 'children');
INSERT INTO Book
VALUES (0003, 488984115444, 'XML for beginners', 'Jake Snow', 2005, 'non-fiction');
INSERT INTO Book
VALUES (0004, 544465545655, 'Into Thin Air', 'Jon Krakauer', 1990, 'non-fiction');
INSERT INTO Book
VALUES (0005, 878745656513, 'And Tango Makes Three', 'Peter Parnell', 1956, 'children');
INSERT INTO Book
VALUES (0006, 564564123213, 'Swimmy', 'Leo Lionni', 2010, 'children');
INSERT INTO Book
VALUES (0007, 132125645678, 'XML and XQuery Tutorial', 'Lee Cakes', 2014, 'non-fiction');
INSERT INTO Book
VALUES (0008, 132154548746, 'Happy Places', 'Steve Zus', 1998, 'refrence');
INSERT INTO Book
VALUES (0009, 788897998754, 'The Mascot', 'Kevin Bacon', 1987, 'fiction');
INSERT INTO Book
VALUES (0010, 878561132116, 'XQuery for beginners', 'Virginia
伍尔夫,2018,“非小说”);
INSERT INTO CurrentLoan VALUES (5987, 0004, '13-SEP-17', '14-NOV-17');
INSERT INTO CurrentLoan VALUES (2123, 0003, '13-JAN-17', '15-NOV-17');
INSERT INTO CurrentLoan VALUES (4223, 0009, '14-FEB-17', '12-MAR-17');
INSERT INTO CurrentLoan VALUES (1001, 0005, '12-OCT-17', '09-NOV-17');
INSERT INTO CurrentLoan VALUES (2123, 0002, '13-APR-17', '12-MAY-17');
INSERT INTO History VALUES (4223, 0007, '14-Jan-17', '04-OCT-17');
INSERT INTO History VALUES (3456, 0001, '12-Jan-17', '04-NOV-17');
INSERT INTO History VALUES (1001, 0003, '14-APR-17', '08-OCT-17');
INSERT INTO History VALUES (5987, 0009, '14-MAY-17', '04-DEC-17');
这是查询,但它输出所有 CurrentLoan 值,谁能帮我让它只输出 John Smith 的值:
SELECT
Book.bookID, title, due_date
FROM
Book, Member_
INNER JOIN
CurrentLoan ON Book.bookID = CurrentLoan.bookID
WHERE
Member_.lastname = 'Smith' AND Member_.firstname = 'John';
我需要回答的问题是:找到 John Smith 当前正在借阅的所有图书的图书 ID、书名和到期日期。
【问题讨论】:
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 多年前),不鼓励使用它