Объединение нескольких таблиц в запросе SQL

Я пытаюсь выбрать информацию из нескольких таблиц в моей базе данных, которые отображают детали нескольких книг и заказов.

Я запрашиваю 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:      

Однако есть некоторые isbns, которые не были упорядочены и, таким образом, отсутствуют в таблице строк порядка, но находятся в таблице книг, которая отображает isbn для всех книг.

Я хочу отобразить информацию о книгах для тех книг, которые также не имеют заказов, таких как:

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

по существу, я хочу таблицу, отображающую информацию о книге для значений isbn и null, где нет заказов. Я предполагаю, что это было бы какое-то естественное внешнее соединение, однако мои попытки привели к пустым таблицам.

Обновлен запрос на удаление дубликатов с помощью группировки по

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. Выражение № 4 из списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец mousavs.orderline.isbn, который функционально не зависит от столбцов в предложении GROUP BY.

1 ответ

Решение

Оставьте соединение 101... и вы действительно.... действительно должны прочитать о соединениях, если вы планируете работать в RDMS.

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
Другие вопросы по тегам