这是我需要执行的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
答案 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 )
)