要创建一个视图,使用5个表,所有表中的所有列
我必须创建一个视图,将客户,订单,订单,雇员,付款和产品表中的所有列连接在一起。 表的架构是低于要创建一个视图,使用5个表,所有表中的所有列
我尝试下面的查询,虽然我不知如何解决上述问题:
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和新手数据库,所以任何帮助表示赞赏。
您的查询似乎好吗,但我不认为它可以让你创建一个视图,如果不止一个列具有同名。
因为有重复,例如, CITY
,我认为唯一的解决办法是命名所有的列并为重复的列指定唯一的名称。
这么多关于查询看起来不正确。 –
@dmitry bychenko:你对重复列错误是正确的。虽然你能建议我如何改变上述查询以避免这个问题 –
这里有一些事情的看法会错:
- 你必须花括号是没有必要的(也许这就是问题的错误)。
- 您正在选择
*
,但具有重复的列名称(例如productcode
),这会阻止创建视图。最佳实践:在视图中明确列出所有列。 - 您有
c.CUSTOMER NUMBER = o.CUSTOMERNUMBER
。该空间可能是一个错字。如果不是,请更改名称,以便该空间不属于名称的一部分。最佳实践:使用不必转义的标识符。我不知道sys.customers
表。sys
模式应该只用于内部Oracle对象。 (Here是一个来源。)
“重复的列名称”是视图定义的错误;所以在这种情况下避免它们不仅是最佳实践,而且是必需的。 – mathguy
@戈登:1是一个错字2.所以我需要所有表中的所有列,你可以建议我怎么做。 3.也是一个错字4.我的练习表被加载到SYS模式中 –
感谢您的所有输入。他们帮助我了解了答案。 以下是对上述问题的查询。它给了我一个来自所有表格的列的视图。
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
;
什么是错误? – Ravi
查询有什么问题? – 2017-09-23 16:09:04
为什么大括号? –