I have been working on this problem for about 8 hours with no success. Does anyone have any ideas?
Problem: Using the correct tables, create a sub query using either join operation you wish that will list the customer number, first and last name concatenated together, and city for all customers who have placed an order for the most expensive book (based on retail price). Give the combined customer names column and alias of "Customer Name".
Here is my code:
SELECT book_customer.customerid, lastname || ', ' || firstname AS "Customer Name", city
FROM book_customer, book_order, order_items 
    WHERE book_customer.customerid = book_order.customerid
        AND book_order.orderid = order_items.orderid
            AND bookid =
            (
            SELECT MAX(retail) 
                FROM books 
                    GROUP BY bookid
            )
;
Result:
 SQL> SELECT book_customer.customerid, lastname || ', ' || firstname AS "Customer Name", city
  2   FROM book_customer, book_order, order_items 
  3    WHERE book_customer.customerid = book_order.customerid
  4     AND book_order.orderid = order_items.orderid
  5      AND bookid =
  6      (
  7      SELECT MAX(retail) 
  8       FROM books 
  9        GROUP BY bookid
 10      )
 11  ;
    SELECT MAX(retail)
    *
ERROR at line 7:
ORA-01427: single-row subquery returns more than one row
I also tried this:
SELECT customerid, lastname || ', ' || fistname AS "Customer Name", city
FROM book_customer, book_order
    WHERE book_customer.customerid = book_order.customerid
        AND orderid = 
        (
        SELECT orderid
            FROM order_items
                AND bookid =
                 (
                 SELECT bookin
                    FROM books
                        GROUP BY bookid
                            HAVING MAX(retail)
                  )
        )
;
Result:
  SQL> SELECT customerid, lastname || ', ' || fistname AS "Customer Name", city
  2   FROM book_customer, book_order
  3    WHERE book_customer.customerid = book_order.customerid
  4      AND orderid = 
  5      (
  6      SELECT orderid
  7       FROM order_items
  8         AND bookid =
  9          (
 10          SELECT bookid
 11            FROM books
 12              GROUP BY bookid
 13                HAVING MAX(retail)
 14           )
 15      )
 16  ;
       AND bookid =
       *
ERROR at line 8:
ORA-00907: missing right parenthesis
ERD
Book_Customer TABLE
CustomerID              PK
Lastname
Firstname
Address
City
State
Zip
Referred
Book_Order TABLE
OrderID               PK
CustomerID            FK
OrderDate
ShipDate
ShipStreet
ShipCity
ShipState
ShipZip
Order_Items TABLE
OrderID               PK/FK
ItemNum               PK/FK
BookID
Quantity
Books TABLE
BookID                PK
ISBN 
Title
PubDate
PubID                 FK
Cost
Retail
Category
Any help would be much appreciated.