-1

我正在尝试从我的数据库中的多个表中选择信息,这些表显示了多本书和订单的详细信息。 在此处输入图像描述

我正在将 isbn 查询到某本书的 5 个表(作者、图书作者、图书、订单行和图书订单)中,以检索有关该图书的信息以及已为该图书下达的订单信息。

SELECT orderline.isbn, title, ordernumber, orderdate, customername, numcopies, orderline.bookprice, authorname
    FROM author natural join bookauthor  natural join book join orderline natural join bookorder
        WHERE orderline.isbn = book.isbn
        and book.isbn = "1491936169"

这给了我: 在此处输入图像描述

ISBN: 1491936169    Title: Kafka: The Definitive Guide: Real-Time Data and Stream Processing at Scale
                    Author: Neha Narkhede, Todd Palino, Gwen Shapira
Order Number  Date       Customer             Copies  Price     Total
N201699998    2016-12-24 Mary Hall                 2   33.99     67.98
N201799999    2017-01-03 Aran Clauson              1   33.99     33.99
Total:      

然而,有一些 isbn 还没有被排序,因此没有出现在 orderline 表中,而是出现在 book 表中,它显示了所有书籍的 isbn。

我想显示那些没有订单的书籍的书籍信息,例如:

ISBN: 0387848576    Title: The Elements of Statistical Learning
                    Author: Jerome Friedman, Trevor Hastie, Robert Tibshirani
No orders

本质上,我想要一个表格,显示没有订单的 isbn 和 null 值的书籍信息。我想这将是某种自然的外部连接,但是我的尝试导致空表。

更新的查询尝试使用 group by 删除重复项

SELECT ordernumber, orderdate, customername, orderline.isbn, title, orderline.numcopies, stock, shipmentbook.numcopies as shipcopies, authorname
FROM author natural join bookauthor natural join book left join bookorder natural join orderline
                ON book.isbn = orderline.isbn 
                left join mousavs.shipmentbook
                ON book.isbn = shipmentbook.isbn
                WHERE stock > orderline.numcopies
                GROUP BY ordernumber
                ORDER BY  orderdate, ordernumber, ISBN

错误代码:1055。SELECT 列表的表达式 #4 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“mousavs.orderline.isbn”

4

1 回答 1

3

Left join 101 ... 如果您打算在 RDMS 中工作,您真的需要阅读 joins。

select
    b.isbn
    ,b.title
    ,b.bookprice
    ,b.stock
    ,a.authorname
    ,o.ordernumber
    ,o.numcopies
    ,o.price
from
    book b
    inner join 
        BookAuthor ba on
        ba.isbn = b.isbn
    inner join
        Author a on
        a.authorid = ba.authorid
    left join
        orderline o on
        o.isbn = b.isbn
    left join
        bookorder bo on
        bo.ordernumber = o.ordernumber
where
    b.isbn = 1491936169
于 2017-06-09T14:02:28.343 回答