多个子查询以查找答案

  • 本文关键字:查找 答案 查询 sql
  • 更新时间 :
  • 英文 :


我必须列出客户购买的所有产品名称。我不能使用连接,所以我必须使用子查询或相关的子查询。找到答案需要4个表,我需要使用客户表,销售订单表,项目表和产品表。客户-销售订单表通过customer_id连接,销售订单-项目表通过订单 ID 连接,物料-产品表通过产品 ID 连接。我可以做一个子查询来查找第一部分,做一个子查询来查找最后一部分。但是由于某种原因,我似乎无法让所有这些人连接在一起。它一直告诉我我缺少右括号......这是我到目前为止所拥有的。(使用甲骨文 10g)

SELECT order_id
FROM a_sales_order s
WHERE EXISTS
(SELECT 'X'
FROM a_customer c
WHERE s.customer_id=c.customer_id AND name='Thermo Power')

这将给我一个列表,列出我正在寻找的公司所做的所有订单ID。然后,我需要创建另一个子查询来获取提供的订单 id 中所有项目的项目 id:

SELECT item_id
FROM a_item i
WHERE EXISTS
(SELECT 'X'
FROM a_sales_order s
WHERE s.order_id=i.order_id)

然后是将项目 ID 转换为产品名称的最后一个子查询:

SELECT product_name
FROM a_product p
WHERE EXISTS
(SELECT 'X'
FROM a_item i
WHERE i.product_id=p.product_id)

问题是当我尝试将它们全部加在一起时,我会收到错误,并且我不确定我应该如何将它们连接在一起。

SELECT product_name
FROM a_product p
WHERE EXISTS
(SELECT 'X'
FROM a_item I
WHERE i.Product_id=p.product_id)
AND EXISTS
SELECT item_id
FROM a_item I
WHERE EXISTS
(SELECT 'X'
FROM a_sales_order s
WHERE s.order_id=i.order_id)
AND EXISTS
SELECT order_id
FROM a_sales_order s
WHERE EXISTS
(SELECT 'X'
FROM a_customer c
WHERE s.customer_id=c.customer_id AND name='Thermo Power')

似乎无论我在哪里放括号,它都会给我一个错误,说我在这里错过了一个或在那里丢失了一个。

试试...

select  product_name
from    a_product p
where   exists ( select 'X'
                 from   a_item i
                 where  i.Product_id = p.product_id )
        and exists ( select item_id
                     from   a_item i
                     where  exists ( select 'X'
                                     from   a_sales_order s
                                     where  s.order_id = i.order_id ) )
        and exists ( select order_id
                     from   a_sales_order s
                     where  exists ( select 'X'
                                     from   a_customer c
                                     where  s.customer_id = c.customer_id
                                            and name = 'Thermo Power' ) )

我在SMSS中格式化了您的SQL,它开始看起来很清楚东西可能关闭的地方。

SELECT product_name
  FROM a_product p
 WHERE EXISTS ((SELECT 'X'
                  FROM a_item I
                 WHERE i.Product_id=p.product_id)
   AND EXISTS (SELECT item_id
                 FROM a_item I
                WHERE EXISTS (SELECT 'X'
                                FROM a_sales_order s
                               WHERE s.order_id=i.order_id)
                  AND EXISTS (SELECT order_id
                                FROM a_sales_order s
                               WHERE EXISTS (SELECT 'X'
                                               FROM a_customer c
                                              WHERE s.customer_id=c.customer_id 
                                                AND name='Thermo Power')

最新更新