2012-03-30 12 views
2

SQL Server 2008データベースで作業しています。このデータベースには2つのテーブルがあります。SQLのUPDATEステートメントでIFステートメントを組み合わせる

Book 
ID 
BookCategoryID 
Name 
IsFlagged 

BookCategory 
ID 
Name 
IsFlagged 

私は、カテゴリ内のすべてのブックにフラグが設定されている場合、BookCategoryレコードのIsFlaggedプロパティがtrueに設定されているようにBookCategoryテーブルを更新する必要があります。それ以外の場合、フラグが設定されているカテゴリに書籍がない場合は、BookCategoryレコードのIsFlaggedプロパティをfalseに設定する必要があります。これを行う方法はありますか?私はそれを把握していないようだ。私は次のようなことをしようとしていたが、行き詰まっていた。すべてのカテゴリでブックをフラグを立てために好奇心のうち

UPDATE 
    BookCategory 
SET 
    IsFlagged = (SELECT COUNT(*) FROM Book WHERE [IsFlagged]=1 AND [BookCategory]=?) 

答えて

8
UPDATE bc 
SET IsFlagged = CASE WHEN b.ID IS NULL THEN 0 ELSE 1 END 
FROM 
    BookCategory bc LEFT JOIN 
    Book b ON b.BookCategoryID = bc.ID AND b.IsFlagged = 1 
+1

、それは一度更新してしまうと、このアップデート各BookCategoryレコードをでしょうか?同じBookCategoryを複数回更新するIE – msmucker0527

+0

おそらく、これはSQL Server固有の構文であることを示す必要があります。私は他のRDBMSが 'UPDATE ... FROM'をサポートしているとは思わないが、私は肯定的ではない。 – JNK

+0

@JNKあなたが正しいです、私は他のRBDMSがそれをサポートしているとは思わない...しかし、OPは質問でSQL Serverを指定しました... –

3
UPDATE BookCategory 
SET IsFlagged = 0 

UPDATE BookCategory b 
SET IsFlagged = 1 
WHERE EXISTS (SELECT 1 FROM Books 
       WHERE bookCategoryid = b.id 
       AND isFlagged = 1) 
関連する問題