首页 > 解决方案 > 如何从另一个表中排除缺少变体的产品?

问题描述

这是我需要进行的 SQL 查询,其中我有一个父产品。在每个产品下,可以嵌套多个变体(再次是产品)。某些变体可能不会发布到 Channel,我需要排除所有至少有 1 个孩子未包含在 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 种不同的变体。从技术上讲,每个产品ID 也是如此。

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

T-Shirt1-M 不在 ChannelReport 上作为 productID。所有 T-Shirt2 变体都在 ChannelReport 中。在这种情况下,结果应该只有:

T恤2

标签: sqlsql-server

解决方案


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

所有至少有 1 y的x

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

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

推荐阅读