如何排除其他表中缺少变化的产品?

时间:2019-02-15 20:08:54

标签: sql sql-server

这是我需要执行的SQL查询,其中有一个父产品。在每个产品下,可以嵌套多个变体(再次为产品)。某些变体可能不会发布到Channel,我需要排除ChannelReport中未包含至少一个孩子的所有父母。

   WHERE 1=1
     AND bvc_Product.ClientID=100
     AND bvc_Product.Status=1
     AND VariationProduct.ProductID is not null
     AND VariationProduct.ChildProductID IN (SELECT productid FROM 
    ChannelReport wpal WHERE wpal.productid = 
    VariationProduct.ChildProductID)

样本数据为:

T恤1-产品ID S,M,L-3种不同的变化。从技术上讲,每个产品也都是productID。

T恤2-产品ID S,M,L-3种不同的变体。

T-Shirt1-M不在productReport上作为productID。所有T-Shirt2版本都在ChannelReport中。在这种情况下,结果应仅为:

T恤2

2 个答案:

答案 0 :(得分:0)

即使没有看到您的桌子,我也可以告诉您。任何时候您有以下要求:

  

所有 x 至少具有1个 y

您需要使用EXISTS()。满足您的伪代码:

WHERE NOT EXISTS(SELECT child FROM Table WHERE ChannelId NOT IN (SELECT Channelid FROM ChannelTable))

答案 1 :(得分:0)

您需要两次使用NOT EXISTS

AND NOT EXISTS (
    SELECT 1 
    FROM VariationProduct VP
    WHERE VP.ProductID = bvc_Product.ProductID
    AND NOT EXISTS( SELECT 1 FROM ChannelReport WHERE ProductID = VP.ChildProductID )
)