[英]Combining data from multiple tables issue Oracle 11g
表//字段
Customer
// Company
Stock
// Description
Manufact
// Manu_Name
Items
// Quantity
, total_price
我正在使用Oracle 11g Application Express。 我需要显示为每个客户订购的每种股票的清单。 我需要显示制造商,订购数量和总价。
当我在SQL * PLUS命令提示符下运行此查询时,它将无休止地显示上述表的结果,直到我强制退出(ctrl + c)应用程序。 这令人难以置信的令人沮丧-我尝试使用EXISTS子句联接表,我只是不知道该怎么办。 任何见解都将是很棒的-不要找人来简单地为我解决这个问题,因此-指导我吧。
SELECT c.company, s.description, m.manu_name, i.quantity, i.total_price FROM db1.customer c JOIN db1.orders o USING (customer_num), db1.stock s, db1.manufact m, db1.items i WHERE o.order_num = i.order_num;
这将导致不断重复显示似乎相同的结果。
本质上,我需要显示库存的每个订单所需的信息。 不过,我并不需要order_num
在我的专栏的输出显示,所以我想我需要使用order_num
(在db1.orders o
& db1.items i
)基本上告诉甲骨文,“对于每一个order_num(一种可以订购没有order_num就不存在),显示(结果)...
我非常迷失-我尝试过外部联接,尝试过使用EXIST运算符,我很困惑,我觉得这很容易被忽略。
编辑:因此,经过大量的思考,看来我终于找到了它。
这是我的方法,以防其他人遇到此问题:
SELECT c.company, s.description, m.manu_name, i.quantity, i.total_price FROM db1.customer c JOIN db1.orders o USING (customer_num) JOIN db1.items i USING (order_num) JOIN db1.stock USING (stock_num) JOIN db1.manufact m ON m.manu_code = s.manu_code ORDER BY c.company, s.description;
如果您在JOIN db1.manufact m USING (manu_code)
,则会从Oracle中得到一个ambiguously defined column
错误-这是因为我已经加入了其他表,并且该表位于其中一个表中(这是db1.stock
表)。 您仍然可以加入他们,但是您必须改为使用JOIN ON。
这显示了我需要的结果。 无论如何,谢谢,如果能帮助到任何人,请加油!
您只提供了5个表之间的两个联接(一个正在USING
,一个在WHERE
)-在这种情况下,您将获得所有其他表中所有其他行的笛卡尔积,因此会有大量行。
( 编辑,暗示您需要将所有表连接在一起,无论是USING
还是JOIN
)
为了使用USING
连接糖,在立即lhs和rhs表中必须存在同一列。 对于将多个联接集成到层次结构中,您可能需要像这样嵌套USINGs
:SELECT c.company,s.description,m.manu_name,i.quantity,i.total_price FROM客户c JOIN订单o JOIN库存s JOIN项目i在USING(manid),USING(itemid),USING(stockid),USING(customer_num)中进行联接;
有where
加入不需要,因为我们已经拥有了USING
加入
我认为在表之间的一些列和关系, 这提琴在这里 :
您还可以删除USING
并使用显式的JOIN
语法,这将避免嵌套(在ANSI世界中也更易于移植):
SELECT c.company, s.description, m.manu_name, i.quantity, i.total_price
FROM customer c
INNER JOIN orders o on c.customer_num = o.customer_num
INNER JOIN stock s on o.stockid = s.stockid
INNER JOIN items i on i.itemid = s.itemid
INNER JOIN manufact m on m.manid = i.manid;
编辑为OP已经证明,窝没有要求USING
连接,提供了连接顺序是明智的,并提供了FK连接列不能跨多个表复制。 http://sqlfiddle.com/#!4/91ef6/9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.