2011-06-10 42 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]