繁体   English   中英

将数据从不同的表传输到维表

[英]Transferring data from different tables into dimension table

我正在尝试使用以下查询,用AdventureWorks数据库中的数据填充产品尺寸

SELECT product.Class,
    product.Color,
    product.DaysToManufacture,
    product.DiscontinuedDate,
    product.ProductLine,
    product.FinishedGoodsFlag,
    product.ListPrice,
    product.MakeFlag,
    product.Name AS productName,
    productDescription.[Description],
    product.ProductNumber,
    product.ReorderPoint,
    product.SafetyStockLevel,
    product.SellEndDate,
    product.SellStartDate,
    product.Size,
    product.StandardCost,
    product.Style,
    product.[Weight],
    model.Name AS model,
    product.WeightUnitMeasureCode,
    product.SizeUnitMeasureCode,
    subcategory.Name AS subcategoryName,
    category.Name AS categoryName,
    photo.LargePhoto,
    photo.LargePhotoFileName,
    photo.ThumbNailPhoto,
    photo.ThumbnailPhotoFileName
    FROM AdventureWorks2008R2.Production.Product product
    INNER JOIN AdventureWorks2008R2.Production.ProductModel model 
    ON (product.ProductModelID = model.ProductModelID)
    INNER JOIN AdventureWorks2008R2.Production.ProductSubcategory subcategory
    ON (subcategory.ProductSubcategoryID = product.ProductSubcategoryID)
    INNER JOIN AdventureWorks2008R2.Production.ProductCategory category
    ON (category.ProductCategoryID = subcategory.ProductCategoryID)
    INNER JOIN AdventureWorks2008R2.Production.ProductProductPhoto productphoto
    ON (productphoto.ProductID = product.ProductID)
    INNER JOIN AdventureWorks2008R2.Production.ProductPhoto photo
    ON (productphoto.ProductPhotoID = photo.ProductPhotoID)
    INNER JOIN AdventureWorks2008R2.Production.ProductModelProductDescriptionCulture productModelDescription
    ON (productModelDescription.ProductModelID = model.ProductModelID)
    INNER JOIN AdventureWorks2008R2.Production.ProductDescription productDescription
    ON (productModelDescription.ProductDescriptionID = productDescription.ProductDescriptionID)
    WHERE productModelDescription.CultureID = 'en';

但是,在产品表中有504个产品记录,但是此查询仅产生294条记录。 跟踪查询一段时间后,我发现获取产品描述的联接是扣除产品记录数量的原因。 我的问题是如何在获取商品说明信息的同时如何获取所有商品记录(504),如果未找到则输入NULL

您可以将FULL OUTER JOIN与ProductDescription表一起使用。

.....   
..... 
INNER JOIN AdventureWorks2008R2.Production.ProductModelProductDescriptionCulture productModelDescription 
            ON (productModelDescription.ProductModelID = model.ProductModelID)
        FULL OUTER JOIN AdventureWorks2008R2.Production.ProductDescription productDescription
.....

通过使用LEFT JOIN,您将获得所有产品。 INNER JOIN将删除ON语句中不匹配的一次行。

编辑:此图像向您显示来自不同类型的联接的结果: SQL联接

您可以在其中看到,使用INNER JOIN只会得到两个表重叠的行,而使用LEFT JOIN则始终会返回第一个表的完整集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM