2014-04-23 153 views
0

在下面的查询中,我试图做一个快速汇总表来显示一些信息。使用where子句是为了从数据库中找到与该发布者相关的信息。在查看其他定义一个小时左右后,我看不清楚我的错在哪里。SQL where子句什么都不返回

对不起,这可能是一件很简单的事情,但是下面的查询有什么明显的错误。

SELECT Publisher.Name AS "Publisher Name", 
     Book.Title AS "Book Title", 
     ShopOrder.OrderDate AS "Order Date", 
     OrderLine.Quantity AS "Order Quantity", 
     (SUM(Quantity*UnitSellingPrice)) AS "Total Value" 
    FROM ShopOrder 
    INNER JOIN OrderLine 
    ON ShopOrder.ShopOrderID=OrderLine.ShopOrderID 
    INNER JOIN Book 
    ON OrderLine.BookID=Book.BookID 
    INNER JOIN Publisher 
    ON Publisher.PublisherID=Book.PublisherID 
    WHERE Publisher.Name='Oxford' 
    GROUP BY ShopOrder.ShopOrderID, 
      Publisher.PublisherID, 
      Book.BookID, 
      OrderLine.Quantity 
    ORDER BY ShopOrder.OrderDate; 

非常感谢任何人的帮助!

编辑: 相关表DEFS

CREATE TABLE Publisher 
(
    PublisherID INTEGER, 
    Name VARCHAR(50), 

    PRIMARY KEY(PublisherID) 
); 

CREATE TABLE Book 
(
    BookID INTEGER, 
    Title VARCHAR(50), 
    Price DECIMAL (10, 2), 
    CategoryID INTEGER REFERENCES Category(CategoryID), 
    PublisherID INTEGER REFERENCES Publisher(PublisherID), 

    PRIMARY KEY(BookID) 

); 

CREATE TABLE ShopOrder 
(
    ShopOrderID INTEGER, 
    OrderDate DATE, 
    ShopID INTEGER REFERENCES Shop(ShopID), 
    SalesRepID INTEGER REFERENCES SalesRep(SalesRepID), 

    PRIMARY KEY(ShopOrderID) 
); 

CREATE TABLE OrderLine 
(
    ShopOrderID INTEGER REFERENCES ShopOrder(ShopOrderID) ON DELETE CASCADE, 
    BookID INTEGER REFERENCES Book(BookID), 
    Quantity INTEGER, 
    UnitSellingPrice DECIMAL (10,2) 
); 
+2

做的所有连接表都有记录的数据,其中'Publisher.Name ='Oxford''?从“Publisher”开始,并加入其他表以查看断开连接的位置。 –

+0

@ d-stanley我是一个SQL noob,所以我不完全确定你的意思。我真的很讨厌问这么愚蠢的问题,因为我可能是愚蠢的,只是在窃听你。你能否更详细地解释。如果不是不用担心:) – RyanH

+1

只是为了测试上述评论,将'INNER JOIN Publisher'改为'RIGHT JOIN Publisher' –

回答

1

这不是一个明确的答案,但我已经添加它来展示如何将调试查询:

开始Publisher

SELECT Publisher.Name AS "Publisher Name" 
FROM Publisher 
WHERE Publisher.Name='Oxford' 

查看结果...

添加Book

SELECT Publisher.Name AS "Publisher Name", 
    Book.Title AS "Book Title" 
FROM Book 
INNER JOIN Publisher 
ON Publisher.PublisherID=Book.PublisherID 
WHERE Publisher.Name='Oxford' 

检查结果...

添加OrderLine

SELECT Publisher.Name AS "Publisher Name", 
    Book.Title AS "Book Title", 
    OrderLine.Quantity AS "Order Quantity" 
FROM OrderLine 
INNER JOIN Book 
    ON OrderLine.BookID=Book.BookID 
INNER JOIN Publisher 
    ON Publisher.PublisherID=Book.PublisherID 
WHERE Publisher.Name='Oxford' 

检查结果...

添加ShopOrder

SELECT Publisher.Name AS "Publisher Name", 
    Book.Title AS "Book Title", 
    ShopOrder.OrderDate AS "Order Date", 
    OrderLine.Quantity AS "Order Quantity" 
FROM ShopOrder 
INNER JOIN OrderLine 
    ON ShopOrder.ShopOrderID=OrderLine.ShopOrderID 
INNER JOIN Book 
    ON OrderLine.BookID=Book.BookID 
INNER JOIN Publisher 
    ON Publisher.PublisherID=Book.PublisherID 
WHERE Publisher.Name='Oxford' 

检查结果...

添加SUM和分组:

SELECT Publisher.Name AS "Publisher Name", 
    Book.Title AS "Book Title", 
    ShopOrder.OrderDate AS "Order Date", 
    OrderLine.Quantity AS "Order Quantity", 
    (SUM(Quantity*UnitSellingPrice)) AS "Total Value" 
FROM ShopOrder 
INNER JOIN OrderLine 
    ON ShopOrder.ShopOrderID=OrderLine.ShopOrderID 
INNER JOIN Book 
    ON OrderLine.BookID=Book.BookID 
INNER JOIN Publisher 
    ON Publisher.PublisherID=Book.PublisherID 
WHERE Publisher.Name='Oxford' 
GROUP BY ShopOrder.ShopOrderID, 
     Publisher.PublisherID, 
     Book.BookID, 
     OrderLine.Quantity 
ORDER BY ShopOrder.OrderDate; 
+0

非常感谢@ d-stanley。通过它反向工作,我现在看到了问题。我的GROUP BY中的旧信息似乎是导致问题的原因。同时也感谢,因为我现在有很好的方法来调试这个在未来的信息! – RyanH

0

斯坦利的答案是这种情况,但任何人真正帮莫名其妙的未来寻找这个问题的答案正确的查询应该如下。

SELECT Publisher.Name AS "Publisher Name", Book.Title AS "Book Title", ShopOrder.OrderDate AS "Order Date", 
OrderLine.Quantity AS "Order Quantity", (SUM(Quantity*UnitSellingPrice)) AS "Total Value" 
FROM ShopOrder 
INNER JOIN OrderLine 
ON ShopOrder.ShopOrderID=OrderLine.ShopOrderID 
INNER JOIN Book 
ON OrderLine.BookID=Book.BookID 
INNER JOIN Publisher 
ON Publisher.PublisherID=Book.BookID 
WHERE Publisher.Name='Oxford' 
GROUP BY publisher.name, book.title, shoporder.orderdate, orderline.quantity 
ORDER BY ShopOrder.OrderDate;