使用包含所有表的所有列的5个表创建视图

时间:2017-09-23 16:07:22

标签: sql oracle view left-join

我必须创建一个视图,将CUSTOMERS,ORDERS,ORDERDETAILS,EMPLOYEES,PAYMENTS和PRODUCTS表中的所有列连接在一起。 该表的架构如下

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和数据库的新手,所以感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您的查询看起来正常,但如果多个列的同名,我认为不会让您创建视图。

由于存在重复,例如CITY,我认为唯一的方法是命名所有列并为重复列提供唯一名称。

答案 1 :(得分:1)

以下是对出错的一些观察:

  1. 你没有必要的花括号(也许这是问题中的拼写错误)。
  2. 您正在选择*,但具有重复的列名称(例如productcode),这会阻止创建视图。最佳实践:在视图中明确列出所有列。
  3. 您有c.CUSTOMER NUMBER = o.CUSTOMERNUMBER。这个空间可能是一个错字。如果没有,请更改名称,以便空格不是名称的一部分。最佳实践:使用不必转义的标识符。
  4. 我不知道sys.customers表。 sys模式只应用于内部Oracle对象。 (Here是一个来源。)

答案 2 :(得分: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
;