2017-09-23 62 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 
; 
相关问题