2016-02-03 20 views
0

在我看來,這真的是一個簡單的修復,但我無法弄清楚。這裏是我正在處理的問題:字段列表中的未知列名 - MySQL

  1. 創建一個名爲order_item_products的視圖,該視圖返回Orders,Order_Items和Products表中的列。 此視圖應從訂單表中返回這些列:order_id,order_date,tax_amount和ship_date。 此視圖應從Order_Items表中返回這些列:item_price,discount_amount,final_price(從項目價格中扣除的折扣金額),quantity和item_total(項目的計算總額)。 這種觀點應該從Products表

這裏返回PRODUCT_NAME列是我的代碼:

CREATE VIEW order_item_products AS 
    SELECT o.order_id, o.order_date, o.tax_amount, o.ship_date, 
       oi.item_price, oi.discount_amount, oi.quantity, 
      (oi.item_price - oi.discount_amount) AS actual_price, 
    (actual_price * oi.quantity) AS final_price, 
       p.product_name 
FROM orders o 
    JOIN order_items oi on o.order_id = oi.order_id 
    JOIN products p ON p.product_id = oi.product_ID; 

我得到的字段列表錯誤消息未知列「actual_price」。我究竟做錯了什麼?它不會計算最終價格。我刪除了最終的價格聲明並執行了查詢,因此它允許它成爲一列。

任何幫助表示讚賞。

+1

你不能在你定義它同時使用的別名。所以'(actual_price * oi_quantity)'必須是'((oi.item_price - oi.discount_amount)* oi.quantity)' –

+0

謝謝!我知道這很簡單。 – Itsonlyme

回答

0

您正嘗試在實際存在之前使用別名。我想,這應該工作:

CREATE VIEW order_item_products AS 
    SELECT 
     o.order_id, 
     o.order_date, 
     o.tax_amount, 
     o.ship_date, 
     oi.item_price, 
     oi.discount_amount, 
     oi.quantity, 
     (oi.item_price - oi.discount_amount) AS actual_price, 
     ((oi.item_price - oi.discount_amount) * oi.quantity) AS final_price, 
     p.product_name 
    FROM orders AS o 
    JOIN order_items AS oi 
     ON o.order_id = oi.order_id 
    JOIN products AS p 
     ON p.product_id = oi.product_ID 
; 
0

我的版本似乎工作:

CREATE or REPLACE view order_item_product 
AS SELECT o.order_id,o.order_date,o.tax_amount,o.ship_date, 
oi.item_price,oi.discount_amount,oi.item_price-oi.discount_amount AS final_price,oi.quantity,COUNT(oi.item_id) AS item_total, 
p.product_name 
FROM orders o,orderitems oi,product p 
WHERE o.order_id=oi.order_id 
AND p. product_id=oi. product_id;