Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一点问题我';我遇到_Sql_Oracle - Fatal编程技术网

Sql 一点问题我';我遇到

Sql 一点问题我';我遇到,sql,oracle,Sql,Oracle,问题是: 查找当前或过去借过“XML和XQuery”和“XQuery:XML查询语言”两本书的成员的姓氏和姓氏 对于我的问题,它应该只打印“大卫·琼斯”,因为这本书的书名都在CurrentLoan和History中,但它也打印了其他三个成员。我的查询是否有问题 以下是数据: 我的代码: CREATE TABLE Book (bookID INT, ISBN INT, title varchar (30), author varchar (20), pub

问题是: 查找当前或过去借过“XML和XQuery”和“XQuery:XML查询语言”两本书的成员的姓氏和姓氏

对于我的问题,它应该只打印“大卫·琼斯”,因为这本书的书名都在CurrentLoan和History中,但它也打印了其他三个成员。我的查询是否有问题

以下是数据:

我的代码:

CREATE TABLE Book
    (bookID INT,
    ISBN INT,
    title varchar (30),
    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, 'childrens');
INSERT INTO Book VALUES (15, 5552314569, 'Green Apple', 'Theo Brown', 1978, 'childrens');
INSERT INTO Book VALUES (16, 6664581631, 'Red Bean', 'Khang Nk', 2017, 'fiction');
INSERT INTO Book VALUES (17, 7771452369, 'XML and XQuery', 'Author Le', 2017, 'non-fiction');
INSERT INTO Book VALUES (18, 8881245525, 'The Dark Room', 'Jack Se', 2017, 'fiction');
INSERT INTO Book VALUES (19, 9991123546, 'Yellow Bird', 'Jake Red', 2014, 'reference');
INSERT INTO Book VALUES (20, 1122112356, 'XQuery: The XML Query Language', 'Heart Le', 2002, 'fiction');
INSERT INTO BOOK VALUES (21, 1212121212, 'The Giving Tree', 'Shel Silverstein', 1964, 'fiction');
INSERT INTO BOOK VALUES (22, 2121212121, 'Gone Fishing', 'Shel Silverstein', 1964, 'reference');
INSERT INTO BOOK VALUES (23, 1313131313, 'The Lazy Dog', 'Jake Red', 2016, 'childrens');
INSERT INTO BOOK VALUES (24, 3131313131, 'The Red Bird', 'Jake Red', 2016, 'childrens');
INSERT INTO BOOK VALUES (25, 1414141414, 'The Very Blue Boy', 'Ben Jen', 2006, 'fiction');

INSERT INTO Member VALUES (001, 'Lee', 'Nancy', 'Brownlea Drive', 1254896325, 10);
INSERT INTO Member VALUES (002, 'Le', 'Ray', '10th Street', 1234561256, 2);
INSERT INTO Member VALUES (003, 'Kan', 'Charlie', '5th Street', 1234567236, 8);
INSERT INTO Member VALUES (004, 'Brown', 'Joe', 'Elm Street', 1234567845, 9);
INSERT INTO Member VALUES (005, 'Smith', 'John', '33 East', 1234567890, 3);
INSERT INTO Member VALUES (006, 'Khang', 'Nkaujyi', '358 Spencer', 2145345625, 5);
INSERT INTO Member VALUES (007, 'Jones', 'David', '4th Street', 14812365789, 10);

INSERT INTO CurrentLoan VALUES (002, 25, '13-SEP-17', '14-NOV-17');
INSERT INTO CurrentLoan VALUES (001, 20, '13-JAN-17', '15-NOV-17');
INSERT INTO CurrentLoan VALUES (006, 14, '14-FEB-17', '12-MAR-17');
INSERT INTO CurrentLoan VALUES (003, 15, '12-OCT-17', '09-NOV-17');
INSERT INTO CurrentLoan VALUES (005, 18, '13-APR-17', '12-MAY-17');
INSERT INTO CurrentLoan VALUES (007, 17, '02-OCT-17', '25-DEC-17');

INSERT INTO History VALUES (002, 17, '14-Jan-17', '04-JUN-17');
INSERT INTO History VALUES (003, 19, '12-Jan-17', '04-NOV-17');
INSERT INTO History VALUES (001, 13, '14-APR-17', '08-OCT-17');
INSERT INTO History VALUES (006, 20, '14-MAY-17', '04-DEC-17');
INSERT INTO History VALUES (007, 20, '02-OCT-16', '25-DEC-16');
COMMIT;
我的问题是:

SELECT lastname, firstname
FROM Member
INNER JOIN CurrentLoan ON Member.memberID = CurrentLoan.memberID
INNER JOIN Book ON CurrentLoan.bookID = Book.bookID
WHERE Book.title = 'XML and XQuery' or title = 'XQuery: The XML Query Language'
UNION
SELECT lastname, firstname
FROM Member
INNER JOIN History ON Member.memberID = History.memberID
INNER JOIN Book ON History.bookID = Book.bookID
WHERE Book.title = 'XML and XQuery' or title = 'XQuery: The XML Query Language';

回答这个问题有几个障碍。首先,我们需要处理会员国目前或过去借阅图书的要求。您有两个表,
CurrentLoan
History
,它们的结构几乎相同。就您的查询而言,我们实际上只关心
memberID
bookID
。合并它们的一种方法是在这两个表之间使用并集。这是有道理的,因为如果一个成员在其中一个表中出现一本书,我们就要计算它

有了这些,我们现在可以按成员对您的表进行聚合,并检查是否有成员使用了这两个感兴趣的标题。在下面的
t2
子查询中,我们找到了这样的匹配
memberID
。然后,所需的只是再次连接回
成员
表,以检索每个匹配成员的完整记录

SELECT
    t1.firstname,
    t1.lastname
FROM Member t1
INNER JOIN
(
    SELECT t.memberID
    FROM
    (
        SELECT memberID, bookID
        FROM CurrentLoan
        UNION ALL
        SELECT memberID, bookID
        FROM History
    ) t
    INNER JOIN Member m
        ON t.memberID = m.memberID
    INNER JOIN Book b
        ON t.bookID = b.bookID
    WHERE
        b.title IN ('XML and XQuery', 'XQuery: The XML Query Language')
    GROUP BY t.memberID
    HAVING
        COUNT(DISTINCT b.title) = 2
) t2
    ON t1.memberID = t2.memberID
正如您所期望的,这只输出David Jones

此处演示:


回答这个问题有几个障碍。首先,我们需要处理会员国目前或过去借阅图书的要求。您有两个表,
CurrentLoan
History
,它们的结构几乎相同。就您的查询而言,我们实际上只关心
memberID
bookID
。合并它们的一种方法是在这两个表之间使用并集。这是有道理的,因为如果一个成员在其中一个表中出现一本书,我们就要计算它

有了这些,我们现在可以按成员对您的表进行聚合,并检查是否有成员使用了这两个感兴趣的标题。在下面的
t2
子查询中,我们找到了这样的匹配
memberID
。然后,所需的只是再次连接回
成员
表,以检索每个匹配成员的完整记录

SELECT
    t1.firstname,
    t1.lastname
FROM Member t1
INNER JOIN
(
    SELECT t.memberID
    FROM
    (
        SELECT memberID, bookID
        FROM CurrentLoan
        UNION ALL
        SELECT memberID, bookID
        FROM History
    ) t
    INNER JOIN Member m
        ON t.memberID = m.memberID
    INNER JOIN Book b
        ON t.bookID = b.bookID
    WHERE
        b.title IN ('XML and XQuery', 'XQuery: The XML Query Language')
    GROUP BY t.memberID
    HAVING
        COUNT(DISTINCT b.title) = 2
) t2
    ON t1.memberID = t2.memberID
正如您所期望的,这只输出David Jones

此处演示:


我只需要会员的姓氏和名。我只需要会员的姓氏和名。