2017-04-13 50 views
0

我有有它bookauthorID另一个表是作者更新SQL WHERE在临时表BOOKNO =书号

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.ID = AUTHOR.BOOKID作为BOOK.AUTHORID列在表中后来又增加

到目前为止

我有这个

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

我现在有一个表告诉每本书和它的作者ID

但我怎样才能更正BOOK.AUTHORID与正确的值,从Author表中获取值,并将它们放在书中?

它就像一个for循环,它转到Book表中的每一行并检查Author表中的哪些ID匹配,然后获取AUTHORID并将其更新到book表中。

请告诉如何编写SQL?

感谢

艾登

+0

谢谢ALL,我会试试看,并会告诉 – Aiden

回答

1

您可以用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; 
+0

Genuis男人!我将此标记为答案,因为您已添加NULL,请检查其他答案没有,请确保在存在大表格时执行速度很快。非常感谢!!!! – Aiden

1

只要加入那些表,并做更新。

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

所有ID首先不能,和ANS你的问题是可能simaple UPDATE语句加入

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

您在连接中缺少'='符号。 – Igor

+0

@Igor更新谢谢 –

1
UPDATE BOOK 
SET AUTHORID = AUTHOR.AUTHORID 
FROM BOOK INNER JOIN AUTHOR ON BOOK.ID = AUTHOR.BOOKID 
+0

这也是一个很好的答案,因为所有其他的,只是缺少NULL检查,否则所有的答案都是类似的超级 – Aiden

+0

@Aiden - 'null'检查只允许你运行更快的更新,如果一些记录在' BOOK'已经具有'AuthorId'的值。如果它是一个新列(*如您在问题*中所述)或者没有任何记录具有'AuthorId'值,那么对NULL的检查不会执行任何操作。 – Igor

0

我们也可以做到这一点,我认为

更新b 设置b.AUTHORID =(选择顶部1 a.AUTHORID从作者a 其中b.ID = a.BOOKID)