SQL - 加入多个表?

时间:2014-01-31 18:54:45

标签: sql oracle select join

我正在尝试加入多个表格来创建采购订单清单及其总成本。 我试图遵循SELECT语句,它返回错误 “'OA'。'AIRCRAFT_CODE'INVALID IDENTIFIER”

SELECT al.airline_code AS “Airline Code”, 
    po.purchase_order_no AS “Order Number”,
    ac.aircraft_code as “Aircraft Code”,
    oa.aircraft_quantity as “Quantity of Aircraft Ordered”,
    SUM(oa.aircraft_quantity * ac.aircraft_price) AS “Order Total”
FROM Aircraft ac, Airline al, Ordered_Aircraft oa, Purchase_Order po
    JOIN Airline al ON po.airline_code = al.airline_code
    JOIN Aircraft ac ON oa.aircraft_code = ac.aircraft_code
    JOIN Purchase_Order po ON oa.purchase_order_no = po.purchase_order_no
GROUP BY po.purchase_order_no
ORDER BY al.airline_code ASC;

数据库结构如下:

飞机

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 AIRCRAFT_CODE                             NOT NULL VARCHAR2(5 CHAR)
 AIRCRAFT_TYPE                             NOT NULL VARCHAR2(30 CHAR)
 AIRCRAFT_PRICE                            NOT NULL NUMBER(11,2)

航空公司

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 AIRLINE_CODE                              NOT NULL VARCHAR2(4 CHAR)
 AIRLINE_NAME                              NOT NULL VARCHAR2(20 CHAR)
 AIRLINE_ADDRESS                           NOT NULL VARCHAR2(100 CHAR)
 AIRLINE_CITY                              NOT NULL VARCHAR2(20 CHAR)
 AIRLINE_COUNTRY                           NOT NULL VARCHAR2(20 CHAR)

ordered_aircraft;

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 PURCHASE_ORDER_NO                         NOT NULL NUMBER(3)
 AIRCRAFT_CODE                             NOT NULL VARCHAR2(5 CHAR)
 AIRCRAFT_QUANTITY                         NOT NULL NUMBER(2)

PURCHASE_ORDER

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 PURCHASE_ORDER_NO                         NOT NULL NUMBER(3)
 AIRLINE_CODE                                       VARCHAR2(4 CHAR)
 PURCHASE_ORDER_DATE                       NOT NULL DATE

任何帮助都会很棒。谢谢。

1 个答案:

答案 0 :(得分:2)

在FROM:

之后将您要加入的表格从列表中删除
SELECT 
    al.airline_code AS “Airline Code”, 
    po.purchase_order_no AS “Order Number”, 
    ac.aircraft_code as “Aircraft Code”, 
    oa.aircraft_quantity as “Quantity of Aircraft Ordered”, 
    SUM(oa.aircraft_quantity * ac.aircraft_price) AS “Order Total”
FROM Ordered_Aircraft oa   /*  , Airline al, Ordered_Aircraft oa, Purchase_Order po */   <---
JOIN Purchase_Order po
    ON oa.purchase_order_no = po.purchase_order_no
JOIN Airline al 
    ON po.airline_code = al.airline_code
JOIN Aircraft ac
    ON ac.aircraft_code = oa.aircraft_code
GROUP BY po.purchase_order_no
ORDER BY al.airline_code ASC;

使用以逗号分隔的表列表是一种不同的JOIN语法。如果您正在使用JOIN,则无需再次引用它们。