0

5000のレコードがあり、そのうちの2つのフィールドにとが含まれCategoriesていますSubCategories。可能な値の数は(小さい)有限です。これらはに保持されtblCategorytblSubCategoryリンクされていません(リンクされている必要はありません)。Categoriesメインテーブルの/SubCategoriesは頻繁に変更されることに注意してください。

テーブルの内容をチェックすることにより、各レコードのcategories/が有効かどうかをチェックするフラグをビューに追加したいと思います。/テーブルはめったに変更されませんsubcategoriesCategoriesSubCategory

似たようなものが欲しい 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

カテゴリを無効にしたいのはなぜですか?常に有効に保つには、適切なFKを使用してください。サブカテゴリについても同様です。

一時的に無効になる可能性のあるカテゴリを本当に保存できるようにしたい場合は、FKの子エンドポイントとして機能するフィールドとは別のフィールドに保存してください。検証するときが来たら、FKがカバーするフィールドに移動するだけです。

于 2012-09-18T11:48:14.503 に答える
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 に答える