确保在多对多关系中至少有一种关系是主要关系

时间:2010-06-07 02:27:41

标签: sql sql-server

对不好的头衔感到抱歉,如果你能想到更好的头衔,请告诉我。

使用表格的多对多关系。

  • 产品
  • 产品分类
  • 分类

在ProductCategory表中,我有布尔列primarycategory

每个产品必须具有主要类别。

我想在我的数据库中找到没有primarycategory的所有产品。

2 个答案:

答案 0 :(得分:0)

注意:我假设表格中的字段名称不是您指定的字段。

这应返回没有主要类别的产品ID的明确列表。 SQL Server中的位字段是数字,因此您可以将它们提供给max()函数。

select
   pc.product
from
   ProductCategory pc
group by
   pc.product
having
   max(pc.primarycategory) = 0

以上查询假设所有产品至少有一个类别。如果没有,请尝试以下方法:

select
   pc.product
from
   Product p
   left join
   ProductCategory pc on p.id = pc.product
group by
   pc.product
having
   max(isnull(pc.primarycategory, 0)) = 0

答案 1 :(得分:0)

假设true = value 1,请尝试:

  Select Product From Product p
  Where Not Exists (Select * From ProductCategory
                    Where Product = p.Product  
                       And primarycategory = 1 )

但是如果您可以控制此数据库,请将PrimaryCategory列移动到Products表,(并使用类别标识符本身填充它,而不是布尔值),这属于正确规范化的模式... < / p>