Обновить 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)