2016-03-06 82 views
1

我需要在from子句中使用select,但我一直获得笛卡尔产品。笛卡尔产品和从条款中选择

select 
customer.customer_name 
,orders.order_date 
,order_line.num_ordered 
,order_line.quoted_price 
,part.descript 
,amt_billed 
from (select order_line.num_ordered*part.price as amt_billed 
    from order_line 
    join part 
    on order_line.part_num = part.part_num 
    ) billed 
,customer 
join orders 
on customer.customer_num = orders.customer_num 
join order_line 
on orders.order_num = order_line.order_num 
join part 
on order_line.part_num = part.part_num; 

不要费心去看待其余的太难。我已经知道如果删除select子句中的from子句和amt_billed子查询,我不会得到笛卡尔积。我在做什么错误导致笛卡尔产品?

+0

你忘记了与一个或多个其他表中加入你的子查询。 '(你的子查询),客户...'它应该'(你的子查询)asname加入客户[或其他表]在...' –

+0

你还必须在子查询中添加一些可以让你加入的列它与一些表。 –

+0

@JorgeCampos当我尝试在我的别名和子查询之间使用'AS'时,它告诉我'ORA-00933:SQL命令没有正确结束'。另外,如果我尝试在连接中使用“billed”别名,它会告诉我'ORA-00942:table or view does not exist'。 –

回答

1

笛卡尔产品的原因是,您没有加入与ordersPart表的子选择。所有的

首先,你不需要那么sub-select

SELECT customer.customer_name, 
     orders.order_date, 
     order_line.num_ordered, 
     order_line.quoted_price, 
     part.descript, 
     order_line.num_ordered * part.price AS amt_billed 
FROM customer 
     JOIN orders 
     ON customer.customer_num = orders.customer_num 
     JOIN order_line 
     ON orders.order_num = order_line.order_num 
     JOIN part 
     ON order_line.part_num = part.part_num; 
+0

非常感谢!这正是我所期待的。 –

+0

将这两个↑移至您的第一条评论。 –