2011-06-10 43 views
0

我有一个关系从N到N从类别到我的数据库中的项目。Sql查询得到所有类别,如果有效

我对这个三个表:

类别,项目和Categories_Items

我想获得的所有类别,每个人告诉我,如果是主动或不旁边有一个额外的字段。

这就是我得到的时刻:

SELECT C.ID 
      ,C.Name 
      ,IsActive=???? 
     FROM Categories C 
     left join Items_Categories IC on IC.CategoryID=C.ID 
    where [email protected] 

结果我想获得的所有可用类别列表,并标记为活动那些在表Items_Categories并与匹配@ItemId:

 
ID Name  IsActive 
-- --------- -------- 
1 Category1 0 
2 Category2 1 
3 Category3 ..... 
+1

是什么让一个类别“活动”?它是否被用于分类项目? – diagonalbatman 2011-06-10 12:09:22

+1

为什么左连接?因为您在WHERE子句中使用Items_Categories.ItemID,所以效果不会有效,结果与内部连接一样好 – Chandu 2011-06-10 12:11:08

+0

嗨,感谢您的快速响应。我没有在帖子中正确解释我的自我。我想获得所有类别,并将其标记为另一个表中的活动类别。 – Jose3d 2011-06-10 12:12:19

回答

2

试试这个:

SELECT C.ID 
       ,C.Name 
       ,CASE 
        WHEN IC.CategoryID IS NULL THEN 0 
        ELSE 1 
       END IsActive 
    FROM Categories C LEFT JOIN Items_Categories IC 
     ON IC.CategoryID=C.ID 
    AND [email protected] 
+0

谢谢,这正是我正在寻找的。 – Jose3d 2011-06-10 12:16:01

1
SELECT C.ID 
     ,C.Name 
     ,CASE WHEN /*Whatever condition makes it active goes here*/ THEN 1 ELSE 0 END AS IsActive 
    FROM Categories C 
    LEFT JOIN Items_Categories IC on IC.CategoryID=C.ID 
    WHERE [email protected] 

这应该可以帮助...如果你定义,使得它活跃的状态,我会更新查询

0
SELECT C.ID 
      ,C.Name 
      ,isnull((select 1 from [tablename] where [tablename.Category] = C.Name), 0) as IsActive 
     FROM Categories C 
     left join Items_Categories IC on IC.CategoryID=C.ID 
    where [email protected]