问题描述
我有四个表:
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
表中我没有直接引用Customer
或Site
表,因此如何获得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
)。这样更易于阅读和理解,更清晰,更不易出错。