我必须创建一个视图,将CUSTOMERS,ORDERS,ORDERDETAILS,EMPLOYEES,PAYMENTS和PRODUCTS表中的所有列连接在一起。 该表的架构如下
我尝试了以下查询,但我不知道如何解决上述问题:
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 :(得分:1)
您的查询看起来正常,但如果多个列的同名,我认为不会让您创建视图。
由于存在重复,例如CITY
,我认为唯一的方法是命名所有列并为重复列提供唯一名称。
答案 1 :(得分:1)
以下是对出错的一些观察:
*
,但具有重复的列名称(例如productcode
),这会阻止创建视图。最佳实践:在视图中明确列出所有列。c.CUSTOMER NUMBER = o.CUSTOMERNUMBER
。这个空间可能是一个错字。如果没有,请更改名称,以便空格不是名称的一部分。最佳实践:使用不必转义的标识符。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
;