SQL Server使用间接引用从多个表创建视图

问题描述

我有四个表:

CUSTOMER(CustomerId,CustomerName)
SITE(SiteId,SiteName,CustomerId(FK ref CUSTOMER))
TOOL(ToolId,ToolName,SiteId(FK ref SITE))
TICKET(TicketId,Amount,ToolId(FK ref TOOL))

要点:

我想创建一个如下所示的视图:

VIEW_TICKETS(TicketId,CustomerName,ToolName)

我了解我可以通过执行以下操作来获得ToolName

CREATE VIEW ViewTicket
AS
SELECT TICKET.TicketId,TICKET.Amount,TOOL.ToolName
FROM
TICKET,TOOL
WHERE
TICKET.ToolId = TOOL.ToolId

但是,由于在TICKET表中我没有直接引用CustomerSite表,因此如何获得SiteName和{{1} }?

解决方法

您只需要同时连接其他表即可。

CREATE VIEW viewticket
AS
SELECT ti.ticketid,ti.amount,cu.customername,si.sitename,tl.toolname
       FROM ticket ti
            LEFT JOIN tool tl
                      ON tl.toolid = ti.toolid
            LEFT JOIN site si
                      ON si.siteid = tl.siteid
            LEFT JOIN customer cu
                      ON cu.customerid = si.customerid;

LEFT JOIN似乎更合适(除非所有外键都声明为NOT NULL)。

并考虑不再使用,连接。始终对JOIN关键字和ON子句使用正确的语法(除非它是CROSS JOIN)。这样更易于阅读和理解,更清晰,更不易出错。