更新SQL,其中BOOKNO=临时表中的图书编号

更新SQL,其中BOOKNO=临时表中的图书编号,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,我有一个表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 现在我必须从Author表中

我有一个表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
现在我必须从Author表中填写Book表中的authord列,其中Book.ID=Author.BOOKID作为Book.authord列稍后添加到表中

到目前为止

我有这个

WITH ALLBOOKSANDAUTHORIDS AS
(
SELECT * FROM BOOK INNER JOIN AUTHOR on BOOK.ID = AUTHOR.BOOKID
)
我现在有一张表格,上面写着每本书及其作者ID

但是,如何使用正确的值更新BOOK.authord,从Author表中获取值并将其放入BOOK中呢

这就像一个for循环,其中转到Book表中的每一行,检查Author表中与之匹配的ID,然后获取AUTHORID并在Book表中更新它

请告诉我如何编写SQL

谢谢

Aiden

您可以通过更新/加入来完成此操作:

您可以通过更新/加入来完成此操作:


只需连接这些表并进行更新

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

只需连接这些表并进行更新

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

首先ID不能为零,ans对您的问题是可能是simaple Update语句与join

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

首先ID不能为零,ans对您的问题是可能是simaple Update语句与join

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

我想我们也可以这样做

更新b Set b.AUTHORID=从作者a中选择前1个a.AUTHORID
我想我们也可以这样做

更新b Set b.AUTHORID=从作者a中选择前1个a.AUTHORID
其中b.ID=a.BOOKID

谢谢大家,我会试试看,然后告诉大家谢谢大家,我会试试看,然后告诉大家你的加入缺少了=符号。@Igor更新了谢谢大家,你的加入缺少了=符号。@Igor更新了谢谢大家!我将此标记为答案,因为您添加了其他答案没有的空检查,所以有必要确保在有一个大表时性能快速。谢谢!!!!他是男人!我将此标记为答案,因为您添加了其他答案没有的空检查,所以有必要确保在有一个大表时性能快速。谢谢!!!!和其他答案一样,这也是一个很好的答案,只是缺少空检查,否则所有答案都是相似的super@Aiden-如果BOOK中的某些记录已具有AuthorId值,则空检查仅允许您运行更快的更新。如果它是一个新列,如您在问题中所述,或者没有任何记录具有AuthorId值,那么对NULL的检查不起任何作用。与其他所有记录一样,这也是一个很好的答案,只是缺少空检查,否则所有答案都是相似的super@Aiden-如果BOOK中的某些记录已具有AuthorId值,则空检查仅允许您运行更快的更新。如果它是问题中所述的新列,或者没有任何记录具有AuthorId值,那么对NULL的检查不起任何作用。