簡體   English   中英

復雜的sql:包括來自products表的記錄,其中join的值已刪除join表中設置的值

[英]complex sql: include records from products table where value on join has isdeleted value set in joined table

我有一個提供移動應用程序的Web服務。 由於多種原因,我通過查詢將數據通過服務發送到應用程序,該查詢將產品,類別產品和類別連接到該產品所在的每個類別的單個記錄中:

 SELECT * FROM
    (SELECT ROW_NUMBER() OVER(ORDER BY Products.ItemID, Products.ManufacturerID) AS RowNum,
         Products.ProductID, Products.ItemID, Products.ManufacturerID, Categories.CategoryID, Categories.CategoryName, CategoryProducts.CategoryProductID,  Products.ItemName, Products.Description, Products.Notes, 
                      Products.Dimensions, Products.BasePrice, Products.OrderMinimumQuantity, 
                      ContainerMinimumQuantity = 
                        CASE  COALESCE(Products.ContainerMinQty, 0)
                            WHEN 0 THEN Products.OrderMinimumQuantity
                            ELSE Products.ContainerMinQty
                        END 
                      , Products.OrderMultipleQuantity, Products.OnHandQuantity, 
                      Products.Category, Products.IntroDate, Products.BackOrderDate, Products.UPC, Products.PriceLevel1, Products.PriceLevel2, Products.PriceLevel3, 
                      Products.PriceLevel4, Products.PriceLevel5, Products.PriceLevel6, Products.PriceLevel7, Products.PriceLevel8, Products.PriceLevel9, Products.PieceBox, 
                      Products.Cubes, Products.UnitOfMeasure, Products.UDF1, Products.UDF2, Products.UDF3, Products.UDF4, Products.UDF5, Products.AdditionalImageCount, 
                     PhotoName= LOWER(Products.PhotoName),  Products.Discontinued, Products.ModifiedOn, 
                        CategoryProducts.IsDeleted, Products.PriceLevel10, Products.PriceLevel11, Products.PriceLevel12, Products.PriceLevel13, 
                      Products.PriceLevel14, Products.PriceLevel15, Products.PriceLevel16, Products.PriceLevel17, Products.PriceLevel18, Products.PriceLevel19, Products.PriceLevel20, 
                      Products.Weight, Products.DimensionsMetric, Products.Source, Products.InventoryStatus, Products.CatalogCode, Products.CatalogName, 
                       CategoryProducts.SortOrder
 JOIN
                Categories INNER JOIN
                      CategoryProducts ON Categories.CategoryID = CategoryProducts.CategoryID RIGHT OUTER JOIN
                      Products ON CategoryProducts.ManufacturerID = Products.ManufacturerID AND CategoryProducts.ItemID = Products.ItemID
WHERE     (Products.ManufacturerID = @ManufacturerID)
            AND 
            (Products.ModifiedOn > @tStamp OR  CategoryProducts.ModifiedOn > @tStamp)
) AS Products
    WHERE RowNum >= @StartRow AND RowNum <= @EndRow

這使我所有的產品展平,包括我想要的任何類別的產品。 問題在於,如果某個產品已在某個類別中,並且該類別產品已被刪除,則將IsDeleted標志設置到該設備的單個展平記錄上。 這是一個問題,因為該產品本身尚未刪除,但尚未刪除類別產品,但是我的設備僅看到一條記錄,該記錄設置了IsDeleted標志以將其刪除。 因此,在這種情況下,我既需要為展平的產品添加一行信息,同時又要刪除該信息,就好像沒有刪除該產品一樣,以便用戶仍可以在設備上搜索該產品。

希望我能清楚地解釋這一點,我已經為此努力了一周。

如果需要查看兩行,那么我希望在子查詢中看到UNION ALL。 我認為您需要包括所有產品以及所有未刪除的產品類別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM