如何在视图中连接多个表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在视图中连接多个表相关的知识,希望对你有一定的参考价值。

如何创建此查询的视图任何人都可以帮助我,我想创建这个视图,但它显示我的错误

消息4506,级别16,状态1,过程订单视图,第3行每个视图或函数中的列名必须是唯一的。视图或函数“ordersview”中的列名“ID”被指定多次。

CREATE VIEW ordersview
AS
Select * from UserClaimData cd
 Inner join UserClaimDeductions ud on
ud.CLAIMID = cd.ID 
Inner join UserClaimApproval  ua on
ua.CLAIMID = cd.ID  
inner join ClaimDataBreakdown cb on
cb.CLAIMID = cd.ID
inner join  AppExpenseTypes ae on
ae.ID = cb.EXPENSETYPE 
inner join AppNOWTypes an on
ae.ID =  an.EXPENSETYPEID
inner join  AppAreas aa on
aa.ID = cb.AREAID 
inner join AppZones az on
cb.ZONEID = az.ID
inner join AppRegions ar on
ar.ID = cb.REGIONID
答案

您提出的问题的答案是专门引用每个表中的元素;例如:

CREATE VIEW ordersview
AS
Select cd.ID AS ID1, ua.ID as ID2, etc... from UserClaimData cd
 Inner join UserClaimDeductions ud on
ud.CLAIMID = cd.ID 
Inner join UserClaimApproval  ua on
ua.CLAIMID = cd.ID  
inner join ClaimDataBreakdown cb on
cb.CLAIMID = cd.ID
inner join  AppExpenseTypes ae on
ae.ID = cb.EXPENSETYPE 
inner join AppNOWTypes an on
ae.ID =  an.EXPENSETYPEID
inner join  AppAreas aa on
aa.ID = cb.AREAID 
inner join AppZones az on
cb.ZONEID = az.ID
inner join AppRegions ar on
ar.ID = cb.REGIONID

但是,我建议你不要在视图中放置这么复杂的连接。考虑所需的列,并考虑存储过程或表值函数。

另一答案

你不明白错误信息的哪一部分?

你有select *,它汇集了所有表格中的所有列。仅仅基于join条件,很明显大多数表都有一个ID列,因此有多个列称为IDCLAIMID似乎也很受欢迎。

一般来说,不鼓励使用select *。但是,它不应该用于视图。视图应说明它包含的列:

select cd.Id, . . .
另一答案

您的视图有多个具有相同名称的列,这会导致错误。

  • AppRegions有一个名为ID的专栏
  • AppAreas有一个名为ID的专栏
  • UserClaimData有一个名为ID的专栏

更改Select *以指定要在View表上使用的表的列,并添加特定名称,或者只是不要放置它们。

您需要更改视图中某些列的名称。使用AppAreas.ID as aaID

另一答案

视图就像一个虚拟表,因此2个(或更多)列的名称不能相同。

因此,要避免这种情况,请在您的选择查询而不是*提供列名称,如果有两列具有相同名称并且您在视图中都需要它们,请为它们指定不同的别名。

假设您在TableAU和TableAU中有ColumnS,并且您希望它们都在视图中。创建这样的视图

CREATE VIEW vm_Sample
SELECT 
A.COLUMNA COLUMNA_1,
B.COLUMNA COLUMNA_2 
    FROM TABLEA A INNER JOIN TABLE B
    ON A.ID = B.ID

以上是关于如何在视图中连接多个表的主要内容,如果未能解决你的问题,请参考以下文章

如何让片段中的多个视图调用片段类中声明的相同 onClick 函数?

如何使用列表视图在选项卡式活动的片段中呈现 SQLite 表数据 [重复]

切换片段时如何维护子视图的状态?

如何优化多表连接视图以获得更快的响应?

如何连接多个表并填充到 datagridview 控件中?

从单个按钮从多个片段中提取数据