如何使用嵌套子查询查找特定客户订购的产品名称?

时间:2017-11-04 22:40:10

标签: oracle single-page-application apex

所以我正在使用oracle application express,到目前为止我遇到了查询问题。我一直收到错误,查询没有正确结束。我知道你需要在正确的位置输入括号。也许我没有做到这一点?无论如何,我觉得我有概念/身体,但有些东西略有偏差。我需要使用至少3个子查询。这是嵌套查询:

settings

所以我不确定是什么问题,但实在令人沮丧。附:我是这一切的新手。

2 个答案:

答案 0 :(得分:0)

  

找出按特定订购的产品名称   客户

您不需要"嵌套子查询",您需要的是JOINS

orders表格会有一列标识哪个customerorder_items表格会识别每个项目引用的order number,并且还会标识哪个{ {1}}也是。所以我们想要将这些信息加在一起,我将从重新安排你的SQL开始(相当多)

product number

所以,重新安排了很多表格,我有一些未知的问题需要解决(问号)这些表格中存在哪些列名称可以让我将它们连接在一起,因为我不知道知道所有这些都是猜测:

SELECT C.CUSTOMER_ID
FROM DEMO_CUSTOMERS C
inner join DEMO_ORDERS O        on C.?? = O.??
inner join DEMO_ORDER_ITEMS OI  on O.?? = OI.??
inner join DEMO_PRODUCT_INFO PI on OI.?? = PI.??

SELECT PI.PRODUCT_NAME  FROM  PI 
SELECT O.ORDER_ID 
SELECT OI.PRODUCT_ID FROM 

WHERE IN ('Willam Hartsfield')
;

所以:客户>订单>订购商品>产品信息现在"相关"彼此通过SELECT C.CUSTOMER_ID FROM DEMO_CUSTOMERS C inner join DEMO_ORDERS O on C.ID = O.CUSTOMER_ID inner join DEMO_ORDER_ITEMS OI on O.ID = OI.ORDER_ID inner join DEMO_PRODUCT_INFO PI on OI.PRODUCT_ID = PI.ID

现在where子句需要修复,即

joins

像他一样:

WHERE some-column-name-here IN ('Willam Hartsfield')

请注意,您也可以使用:WHERE C.NAME IN ('Willam Hartsfield')

现在我们现在需要的是额外的列,确保在执行此操作时包含表别名:

WHERE C.NAME = 'Willam Hartsfield'

这应该更接近你的需要。

答案 1 :(得分:0)

以下是嵌套查询的解决方案。查询缺少右括号。这可以通过格式化查询来完成。

- 适用于嵌套查询

SELECT product_name FROM demo_product_info WHERE product_id IN 
(
SELECT product_id FROM demo_order_items WHERE order_id IN 
(SELECT order_id FROM demo_orders WHERE customer_id IN 
(SELECT DISTINCT c.customer_id FROM demo_customers WHERE cust_name IN ('Willam Hartsfield')))
);

另外,如上所述@User_by_Already最好的解决方案是在表上写入join子句。

- 加入查询

SELECT 
    dpi.product_name 
FROM    
    demo_customers dc, demo_orders do, 
    demo_order_items doi, demo_product_info dpi 
WHERE 
    dc.customer_id  =   do.customer_id 
AND do.order_id     =   doi.order_id 
AND doi.product_id  =   dpi.product_id 
AND dc.cust_name    IN ('Willam Hartsfield');