我必须列出客户购买的所有产品名称。我不能使用连接,所以我必须使用子查询或相关的子查询。找到答案需要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')