Обновить SQL WHERE BOOKNO = номер BOOK во временной таблице

У меня есть таблица Books, которая имеет bookauthorID в другой таблице, которая является Author

BOOK

ID    BOOK NAME   AUTHORID
 0      A           NULL
 1      B           NULL
 2      C           NULL

AUTHOR

 BOOKID     AUTHORID

 0            123
 1            1234
 2            12345

Теперь мне нужно заполнить столбец AuthorID в таблице Book из таблицы Author, где BOOK.ID = AUTHOR.BOOKID как столбец BOOK.AUTHORID был добавлен позже в таблицу.

До сих пор

у меня есть это

WITH ALLBOOKSANDAUTHORIDS AS
(
SELECT * FROM BOOK INNER JOIN AUTHOR on BOOK.ID = AUTHOR.BOOKID
)

Теперь у меня есть таблица с каждой книгой и идентификатором ее автора

но как я могу обновить BOOK.AUTHORID с правильными значениями, получая значения из таблицы Author и помещая их в книгу?

Это похоже на цикл for, где нужно перейти к каждой строке в таблице Book и проверить, какой идентификатор соответствует в таблице Author, затем получить AUTHORID и обновить его в таблице book.

Подскажите пожалуйста, как написать SQL?

Спасибо

Эйден

5 ответов

Решение

Вы можете сделать это с update/join:

update b
    set b.authorid = a.authorid
    from book b join
         author a
         on b.id = a.bookid
    where b.authorid is null;

Просто присоединитесь к этим таблицам и сделайте обновление.

update book b join author a on (a.bookid=b.id)
    set b.AUTHORID=a.AUTHORID

Во-первых, ID не может быть нулевым, и ответ на ваш вопрос может быть

Update B
SET  B.AUTHORID=A.AUTHORID
FROM Book B
INNER JOIN  AUTHOR A ON A.BOOKID = B.ID
UPDATE BOOK
SET AUTHORID = AUTHOR.AUTHORID
FROM BOOK INNER JOIN AUTHOR ON BOOK.ID = AUTHOR.BOOKID

Мы также можем сделать это, я думаю,

Обновить b Установить b.AUTHORID = (Выбрать верхнюю часть 1 a.AUTHORID От АВТОРА a, где b.ID = a.BOOKID)

Другие вопросы по тегам