如何基于SQL表元数据查询指定表及外键关联表的内容?
实现思路
你已经通过系统视图查询到SalesLT.Customer的关联表为SalesLT.CustomerAddress和SalesLT.SalesOrderHeader,两张关联表均通过CustomerID外键字段关联SalesLT.Customer的主键CustomerID,使用多表关联查询即可一次性返回三张表的内容,以下是两种常用场景的单条查询语句:
场景1:仅返回同时有关联地址、关联订单的客户数据
使用INNER JOIN做等值关联,仅保留三张表匹配一致的记录:
SELECT * FROM SalesLT.Customer c INNER JOIN SalesLT.CustomerAddress ca ON c.CustomerID = ca.CustomerID INNER JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
场景2:返回所有客户数据(含无关联地址/订单的客户)
使用LEFT JOIN以客户表为基表,保留所有客户记录,无关联的地址、订单字段自动填充NULL:
SELECT * FROM SalesLT.Customer c LEFT JOIN SalesLT.CustomerAddress ca ON c.CustomerID = ca.CustomerID LEFT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
注意事项
如果不同表存在同名字段(例如多表均有ModifiedDate、rowguid等公共字段),直接使用SELECT *会出现重名冲突,建议按需指定字段并设置别名,示例如下:
SELECT c.CustomerID, c.FirstName, c.LastName, ca.AddressType, soh.SalesOrderNumber, soh.OrderDate FROM SalesLT.Customer c LEFT JOIN SalesLT.CustomerAddress ca ON c.CustomerID = ca.CustomerID LEFT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
内容的提问来源于stack exchange,提问作者dkajo
相关产品推荐
相关产品推荐

