0

我有 5000 条记录,其中两个字段包含CategoriesSubCategories。只有(小)有限数量的可能值。这些保存在tblCategory,中tblSubCategory,它们没有链接(也不需要链接)。请注意,主表中的Categories/确实经常更改。SubCategories

我想在我的视图中添加一个标志,通过检查表的内容来检查每条记录中的categories/是否有效。/subcategories表很少会改变。CategoriesSubCategory

我只想要类似的东西 CASE WHEN tblRecords.Category is in tblCategory.Category THEN 0 ELSE 1 END AS errCategory

我怎样才能做到这一点?

4

5 回答 5

1

尝试这个:

CASE WHEN (SELECT COUNT(Category) 
        FROM tblCategory WHERE 
       tblCategory.Category = tblRecords.Category) > 0 
THEN 0 ELSE 1 END AS errCategory
于 2012-09-18T11:35:59.180 回答
1

外连接可能比子查询执行得更好:

select tblRecords.*,
       case when tblCategory.Category is null 
            then 0 
            else 1 
        end IsCategoryValid,
       case when tblSubCategory.SubCategory is null 
            then 0 
            else 1 
        end IsSubCategoryValid
  from tblRecords
  left join tblCategory
    on tblRecords.Category = tblCategory.Category
  left join tblSubCategory
    on tblRecords.SubCategory = tblSubCategory.SubCategory

如果您认为 null Category/SubCategory 有效,则需要为案例添加适当的条件。

于 2012-09-18T11:45:09.017 回答
0

这样的事情可能会奏效。有一些定制工作..但很简单..我不知道你想做什么。

select 
  ....
  ,case when cat.found>0 then 0 else 1 end as errCategory
from tblRecords tr
join ......
...........
cross apply (select count(*) from tblCategory tc where tc.Category = tr.Category) cat(found)
于 2012-09-18T11:35:08.840 回答
0

我会使用这样的外部联接:

   select <data>, 
     case when b.Category is null then 1 else 0 end as CategoryError,
     case when c.SubCategory is null then 1 else 0 end as SubCategoryError
   from tblRecords a
   left outer join tblCategory b on a.Category = b.Category
   left outer join tblSubCategory c on a.SubCategory = c.SubCategory
于 2012-09-18T11:45:17.340 回答
0

为什么你会希望一个类别无效?要始终保持有效,只需使用正确的 FK。子类别同上。

如果您确实希望能够存储可能暂时无效的类别,请在与充当 FK 的子端点的字段分开的字段中执行此操作。当需要对其进行验证时,只需将其移至 FK 覆盖的区域即可。

于 2012-09-18T11:48:14.503 回答