它说我没有选择行.
这是个问题:
查找过去或当前从未借过任何图书的会员的会员ID,姓氏和名字.
这是架构,主键是粗体.
书(bookID,ISBN,标题,作者,出版年份,类别)
成员(memberID,姓氏,名字,地址,电话号码,限制)
CurrentLoan(memberID,bookID,贷款日期,截止日期)
历史(memberID,bookID,贷款日期,退货日期)
会员可以从图书馆借书.他们可以借阅的书籍数量受会员关系的“限制”字段限制(不同会员可能会有所不同).书的类别包括小说,非小说,儿童和参考. CurrentLoan表表示当前已检出的书籍的信息.当书籍返回到库时,记录将从CurrentLoad关系中删除,并将与返回日期一起插入到历史关系中.一个库可能有同一本书的多个副本,在这种情况下,每个副本都有自己的bookID,但所有副本共享相同的ISBN.
这是我的代码:
CREATE TABLE Book
(bookID INT,
ISBN INT,
title varchar (25),
author varchar (20),
publish_year INT,
category varchar(20),
PRIMARY KEY (bookID));
CREATE TABLE Member
(memberID INT,
lastname varchar (20),
firstname varchar (20),
address varchar(20),
phone_number INT,
limit_ INT,
PRIMARY KEY (memberID));
CREATE TABLE CurrentLoan
(memberID INT ,
bookID INT,
loan_date DATE,
due_date DATE,
PRIMARY KEY (memberID, bookID),
FOREIGN KEY (memberID) REFERENCES Member(memberID),
FOREIGN KEY (bookID) REFERENCES Book(bookID));
CREATE TABLE History
(memberID INT,
bookID INT,
loan_date DATE,
return_date DATE,
PRIMARY KEY (memberID, bookID, loan_date),
FOREIGN KEY (memberID) REFERENCES Member(memberID),
FOREIGN KEY (bookID) REFERENCES Book(bookID));
INSERT INTO Book VALUES (10, 1113312336, 'The Dog', 'Jack Crow', 1990, 'fiction');
INSERT INTO Book VALUES (12, 2221254896, 'Worms', 'Jim Kan', 2013, 'childrens');
INSERT INTO Book VALUES (13, 3332546987, 'Crow', 'Jan Flo', 2000, 'fiction');
INSERT INTO Book VALUES (14, 4443456215, 'Big Dog', 'Lan Big', 1993, 'children');
INSERT INTO Book VALUES (15, 5552314569, 'Green Apple', 'Theo Brown', 1978, 'children');
INSERT INTO Book VALUES (16, 6664581631, 'Red Bean', 'Khang Nk', 2017, 'fiction');
INSERT INTO Book VALUES (17, 7771452369, 'XML and XQuery Knowledge', 'Author Le', 2017, 'non-fiction');
INSERT INTO Book VALUES (18, 8881245525, 'The Dark Room', 'Jack Se', 2017, 'fiction');
INSERT INTO Book VALUES (19, 9991123546, 'Lonely Mens', 'Geen Brown', 2014, 'refrence');
INSERT INTO Book VALUES (20, 1122112356, 'XML or XQuery', 'Heart Le', 2002, 'fiction');
INSERT INTO Member VALUES (001, 'Lee', 'Nancy', 'Brownlea Drive', 1254896325, 2);
INSERT INTO Member VALUES (002, 'Le', 'Ray', '10th Street', 1234561256, 2);
INSERT INTO Member VALUES (003, 'Kan', 'Charlie', '5th Street', 1234567236, 2);
INSERT INTO Member VALUES (004, 'Brown', 'Joe', 'Elm Street', 1234567845, 2);
INSERT INTO Member VALUES (005, 'Smith', 'John', '33 East', 1234567890, 2);
INSERT INTO CurrentLoan VALUES (005, 10, '13-SEP-17', '14-NOV-17');
INSERT INTO CurrentLoan VALUES (005, 19, '13-JAN-17', '15-NOV-17');
INSERT INTO CurrentLoan VALUES (003, 16, '14-FEB-17', '12-MAR-17');
INSERT INTO CurrentLoan VALUES (004, 15, '12-OCT-17', '09-NOV-17');
INSERT INTO CurrentLoan VALUES (005, 18, '13-APR-17', '12-MAY-17');
INSERT INTO History VALUES (001, 10, '14-Jan-17', '04-OCT-17');
INSERT INTO History VALUES (002, 19, '12-Jan-17', '04-NOV-17');
INSERT INTO History VALUES (003, 13, '14-APR-17', '08-OCT-17');
INSERT INTO History VALUES (005, 20, '14-MAY-17', '04-DEC-17');
我的查询是:
SELECT Member.memberID, lastname, firstname
FROM Member MINUS(
SELECT Member.memberID, lastname, firstname
FROM Member, CurrentLoan
WHERE Member.memberID = CurrentLoan.memberID
UNION
SELECT Member.memberID, lastname, firstname
FROM Member, History
WHERE Member.memberID = History.memberID);
最佳答案 有几种方法可以做到这一点:
您可以使用反连接,例如:
SELECT m.MEMBERID,
m.LASTNAME,
m.FIRSTNAME
FROM MEMBERS m
WHERE m.MEMBERID NOT IN (SELECT DISTINCT MEMBERID
FROM CURRENTLOAN
UNION ALL
SELECT DISTINCT MEMBERID
FROM HISTORY);
另一种方法(和我喜欢的方法)做你想要的是:
SELECT DISTINCT m.MEMBERID,
m.LASTNAME,
m.FIRSTNAME
FROM MEMBERS m
LEFT OUTER JOIN (SELECT DISTINCT MEMBERID
FROM (SELECT MEMBERID
FROM CURRENTLOAN
UNION ALL
SELECT MEMBERID
FROM HISTORY)) u
ON u.MEMBERID = m.MEMBERID
WHERE u.MEMBERID IS NULL;
但是,如果您显示此查询的数据以及原始查询,则应返回零行. SQLFiddle here
请注意,如果您将当前贷款注释到成员004,则“Joe Brown”将返回SQLFiddle here
祝你好运.