使用Oracle的子查询
我已经在这个问题上工作了大约8个小时,但没有成功。有人有什么想法吗 问题: 使用正确的表,使用希望的联接操作创建一个子查询,该操作将列出订购最昂贵书籍(基于零售价)的所有客户的客户编号、连在一起的名字和姓氏以及所在城市。给出“客户名称”的组合客户名称列和别名 这是我的密码:使用Oracle的子查询,oracle,Oracle,我已经在这个问题上工作了大约8个小时,但没有成功。有人有什么想法吗 问题: 使用正确的表,使用希望的联接操作创建一个子查询,该操作将列出订购最昂贵书籍(基于零售价)的所有客户的客户编号、连在一起的名字和姓氏以及所在城市。给出“客户名称”的组合客户名称列和别名 这是我的密码: SELECT book_customer.customerid, lastname || ', ' || firstname AS "Customer Name", city FROM book_customer, book
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
)
;
结果:
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
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
我也试过:
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)
)
)
;
结果:
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
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
任何帮助都将不胜感激。试试这个:
SELECT
Book_Customer.CustomerID,
Book_Customer.lastname || ', ' || Book_Customer.firstname AS "Customer Name",
Book_Customer.city
FROM Order_Items
JOIN Book_Order ON Order_Items.OrderID = Book_Order.OrderID
JOIN Book_Customer ON Book_Customer.CustomerID = Book_Order.CustomerID
JOIN Books ON Books.BookID = Order_Items.BookID
WHERE Books.Retail = (SELECT MAX(Retail) FROM Books)
你需要把任务分解 第一步是确定你在看哪本书,比如:
Select BookID from books where RowNum=1 order by retail desc
这实际上成为了您的子查询,您可以在连接中使用它来收集所需的数据
我可以帮你解决整个问题,但这并不能教会你任何东西——这些东西总是很精细,只有通过精细操作,你才能学会……对于第一个错误,请尝试下面的查询
SQL> SELECT bc.customerid, lastname || ', ' || firstname AS "Customer Name", city
2 FROM book_customer bc, book_order bo, order_items oi
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 )
请在查询中提供tablename.column名称,因为同一列可以存在于查询中使用的多个表中。我可以看到CustomerId存在于多个表中。你也可以使用别名。就像我上面所做的
对于第二个问题,我提供了存在错误的注释:-
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 =--no where caluse here it should be WHERE bookid=
9 (
10 SELECT bookin
11 FROM books
12 GROUP BY bookid
13 HAVING MAX(retail)
14 )
15 )
试试这个
SELECT a.customerid, a.lastname || ', ' || a.firstname AS Customer_Name, a.city
FROM book_customer a,
book_order b,
order_items c
WHERE a.customerid = b.customerid
AND b.orderid = c.orderid
AND c.bookid =
(
SELECT MAX(retail)
FROM books
GROUP BY bookid
);
在第二个示例中,lastname处有一个逗号,| |-请尝试将其删除。谢谢,但仍然存在问题。是否愿意分享新错误第一条错误消息非常明显:表中有多个列名为“customerid”,因此您必须显式指出您想要哪个“customerid”。谢谢,没有注意到这一点。很抱歉,我没有你那么有经验,但感谢你指出显而易见的问题。感谢你的反馈。许多其他答案可以返回多本书的数据(如果多本书共享最高零售价)。我不确定,因为你已经被告知使用子查询和联接,这就是你的导师将要寻找的…相信我,我已经摆弄过了。谢谢你的反馈。谢谢你的反馈。这很有效!谢谢当服务器重新启动时,我将尝试使用我试图用于将来参考的连接,看看是否可以让它正常工作。谢谢你的帮助!我对编辑的不满,我有点累(我已经做了14个小时了),我想这就是你更新进度的方式。