2017-09-23 129 views
0

我必須創建一個視圖,將客戶,訂單,訂單,僱員,付款和產品表中的所有列連接在一起。 表的架構是低於要創建一個視圖,使用5個表,所有表中的所有列

schema for above tables

我嘗試下面的查詢,雖然我不知如何解決上述問題:

create view  orders_view AS 
    select   * 
    from   sys.customers c    
    left JOIN  EMPLOYEES e 
    on    c.SALESREPEMPLOYEENUMBER = e.EMPLOYEENUMBER  
    left join  sys.orders o  
    on    c.CUSTOMER NUMBER = o.CUSTOMERNUMBER 
    left join  sys.orderdetails od 
    on    o.ORDERNUMBER = od.ORDERNUMBER 
    left join  sys.products p 
    on    od.PRODUCTCODE = p.PRODUCTCODE 
    left join  sys.PAYMENTS py 
    on    c.CUSTOMERNUMBER = py.customernumber 

我與SQL和新手數據庫,所以任何幫助表示讚賞。

+0

什麼是錯誤? – Ravi

+1

查詢有什麼問題? – 2017-09-23 16:09:04

+1

爲什麼大括號? –

回答

1

您的查詢似乎好嗎,但我不認爲它可以讓你創建一個視圖,如果不止一個列具有同名

因爲有重複,例如, CITY,我認爲唯一的解決辦法是命名所有的列併爲重複的列指定唯一的名稱。

+1

這麼多關於查詢看起來不正確。 –

+0

@dmitry bychenko:你對重複列錯誤是正確的。雖然你能建議我如何改變上述查詢以避免這個問題 –

1

這裏有一些事情的看法會錯:

  1. 你必須花括號是沒有必要的(也許這就是問題的錯誤)。
  2. 您正在選擇*,但具有重複的列名稱(例如productcode),這會阻止創建視圖。最佳實踐:在視圖中明確列出所有列。
  3. 您有c.CUSTOMER NUMBER = o.CUSTOMERNUMBER。該空間可能是一個錯字。如果不是,請更改名稱,以便該空間不屬於名稱的一部分。最佳實踐:使用不必轉義的標識符。我不知道sys.customers表。 sys模式應該只用於內部Oracle對象。 (Here是一個來源。)
+0

「重複的列名稱」是視圖定義的錯誤;所以在這種情況下避免它們不僅是最佳實踐,而且是必需的。 – mathguy

+0

@戈登:1是一個錯字2.所以我需要所有表中的所有列,你可以建議我怎麼做。 3.也是一個錯字4.我的練習表被加載到SYS模式中 –

0

感謝您的所有輸入。他們幫助我瞭解了答案。 以下是對上述問題的查詢。它給了我一個來自所有表格的列的視圖。

create or replace view  overall AS 
select      c.*, 
          e.LASTNAME, 
          e.FIRSTNAME, 
          e.EXTENSION, 
          e.EMAIL, 
          e.OFFICECODE, 
          e.REPORTSTO, 
          e.JOBTITLE, 
          o.ORDERNUMBER, 
          o.ORDERDATE, 
          o.REQUIREDDATE, 
          o.SHIPPEDDATE, 
          o.STATUS, 
          o.COMMENTS, 
          od.PRODUCTCODE, 
          od.QUANTITYORDERED, 
          od.PRICEEACH, 
          od.ORDERLINENUMBER, 
          p.PRODUCTNAME, 
          p.PRODUCTLINE, 
          p.PRODUCTSCALE, 
          p.PRODUCTVENDOR, 
          p.PRODUCTDESCRIPTION, 
          p.QUANTITYINSTOCK, 
          p.BUYPRICE, 
          p.MSRP, 
          py.CHECKNUMBER, 
          py.PAYMENTDATE, 
          py.AMOUNT 
from      sys.customers c    
left JOIN     EMPLOYEES e 
on       c.SALESREPEMPLOYEENUMBER = e.EMPLOYEENUMBER 
left join     sys.orders o  
on       c.CUSTOMERNUMBER = o.CUSTOMERNUMBER 
left join     sys.orderdetails od 
on       o.ORDERNUMBER = od.ORDERNUMBER 
left join     sys.products p 
on       od.PRODUCTCODE = p.PRODUCTCODE 
left join     sys.PAYMENTS py 
on       c.CUSTOMERNUMBER = py.customernumber 
; 
相關問題