1. ホーム
  2. sql

[解決済み] SQL UPDATE SET 1つのカラムが、異なるカラムで参照される関連テーブルの値と等しくなるようにする?

2022-08-15 05:42:20

質問

お分かりいただけたでしょうか?

クイズ番組のトラッキングデータのテーブルがあり、各行には...

QuestionID と AnswerID (それぞれについてテーブルがあります) です。バグのために、NULL に設定された多数の QuestionID がありましたが、関連する AnswerID の QuestionID は Answers テーブルにあります。

したがって、QuestionIDがNULLでAnswerIDが500だとすると、Answersテーブルに行ってAnswerID 500を見つけると、NULL値があるはずのQuestionIDのカラムが存在します。

だから基本的に私は、各NULL QuestionIDを、trackingsテーブル(書き込まれているNULL QuestionIDと同じ行)にあるAnswerIDのAnswersテーブルで見つかったQuestionIDと同じに設定したいのです。

どのように私はこれを行うのでしょうか?

UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?

一致するAnswerIDからQuestionIDを割り当てるようにするにはどうしたらいいのか分かりませんが...。

どのように解決するのですか?

update q
set q.QuestionID = a.QuestionID
from QuestionTrackings q
inner join QuestionAnswers a
on q.AnswerID = a.AnswerID
where q.QuestionID is null -- and other conditions you might want

更新を実行する前に、更新する結果セットが何であるかを確認することをお勧めします(同じクエリで、ただselectを使用)。

select *
from QuestionTrackings q
inner join QuestionAnswers a
on q.AnswerID = a.AnswerID
where q.QuestionID is null -- and other conditions you might want

特に、各回答IDが間違いなく1つだけ関連する質問IDを持っているかどうかを確認します。