2017-04-13 9 views
0

私は著者更新SQL

BOOK 

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

AUTHOR 

BOOKID  AUTHORID 

0   123 
1   1234 
2   12345 

ある別のテーブル内のbookauthorIDを持つテーブルの書籍今私はどこ著者テーブルからブックテーブルのAuthorID列を埋めるために持っていますBOOK.AUTHORID列を後でテーブルで追加されましたBOOK.ID = AUTHOR.BOOKIDとして

これまで

私はこの

WITH ALLBOOKSANDAUTHORIDS AS 
(
SELECT * FROM BOOK INNER JOIN AUTHOR on BOOK.ID = AUTHOR.BOOKID 
) 
を持っています

私は今、各書籍と著者IDを伝えるテーブルを持っています

BOOK.AUTHORIDを正しい値で更新し、著者テーブルから値を取得し、ブックに入れるにはどうすればよいですか?

Bookテーブルの各行に移動してAuthorテーブルに一致するIDを確認し、AUTHORIDを取得してブックテーブルで更新するforループに似ています。

SQLの記述方法を教えてください。

おかげ

エイデン

+0

ありがとうございました。ありがとうございました。私はそれを試してみると、 – 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チェックを追加したので、これを答えとしてマークしています。大きなテーブルがあるときにperformceが速いことを確認する必要があります。どうもありがとう!!!! – Aiden

1

は、単にそれらのテーブルを結合し、アップデートを行います。すべてのIDの

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

まずゼロすることができず、あなたの質問にANSは

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

は、我々はまた、私が思うに、これを行うことができます参加してsimaple UPDATE文もありです

アップデートb セットb.AUTHORID =(トップ1を選択a.AUTHORID from AUTHOR a b.ID = a.BOOKID)