Смешивание IF-оператора в операторе UPDATE в SQL - PullRequest
2 голосов
/ 30 марта 2012

Я работаю над базой данных SQL Server 2008. Эта база данных имеет две таблицы.

Book
ID
BookCategoryID
Name
IsFlagged

BookCategory
ID
Name
IsFlagged

Мне нужно обновить таблицу BookCategory, чтобы при пометке каких-либо книг в категории для свойства IsFlagged в записи BookCategory было задано значение true. В противном случае, если в категории нет отмеченных книг, мне нужно установить для свойства IsFlagged в записи BookCategory значение false. Есть ли способ сделать это? Я не могу понять это. Я пытался что-то вроде следующего, но продолжал выходить в тупик.

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

Ответы [ 2 ]

8 голосов
/ 30 марта 2012
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
3 голосов
/ 30 марта 2012
UPDATE BookCategory
SET IsFlagged = 0

UPDATE BookCategory b
SET IsFlagged = 1
WHERE EXISTS (SELECT 1 FROM Books
              WHERE bookCategoryid = b.id
              AND isFlagged = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...