2017-10-05 49 views
0

我已经有了一个任务,可以将一些SQL导入到现有视图中。我意识到这段代码与需要添加的视图结合在一起。使用该视图连接表内视图SQL Server

代码:

SELECT * 
FROM Customer(view) Cust 
LEFT join (
select * from People p 
Where id <> '') cu 
on Cust.no = p.no 

查看代码:

CREATE view Customer 
as 
SELECT * 
FROM Customer2(othertable) Cust2 
LEFT join (
select * from People p 
Where id <> '') cu 
on Cust(current view).no = p.no 

基本上,其接合一个表是在视图的结果我最初的想法是创建此作为第二。观点,但我的上级希望它在相同的观点。无论如何,这可以使用子查询或变量来完成吗?

该视图非常巨大,所以我已将其剪下来,希望它能显示出我想要实现的目标。

+0

为什么要对同一个表重复相同的连接? –

回答

1

首先,有没有必要使用子查询的视图:

CREATE VIEW Customer as 
    SELECT . . . -- you should list the columns explicitly 
    FROM Customer2 c2 LEFT JOIN 
     People p 
     ON p.id <> '' AND p.no = c2.no; 

您提供的也只是重复同样加入的代码。您可以轻松添加另一个加入:

SELECT . . . -- you should list the columns explicitly 
    FROM Customer2 c2 LEFT JOIN 
     People p 
     ON p.id <> '' AND p.no = c2.no LEFT JOIN 
     othertable ot 
     ON . . . 
+0

子查询的原因是因为还有其他子查询。有什么办法可以将视图的结果存储在一个变量中,然后从相同的查询中进行选择?还是仅仅是SQL逻辑? –

+1

您可以使用'with'预先在视图内定义多个选择语句https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact -sql。这可以简化(并重用部分)复杂的视图。否则,您可以使用存储的proc或表值函数更程序地执行此操作,但您应该避免这种情况 –