- 締切済み
SQL文の作成について
はじめまして SQL Serverを使用テーブルの更新クエリを作っています。 ◆質問 副問合せの結果をIn句で見ていますがExists句の方がパフォーマンスがあるといわれているので直したいと思っています。 可能でしょうか? ◆SQL文 UPDATE [TABLE_A] SET Data = null WHERE Code IN (Select Code From [TABLE_B] B, [TABLE_C] C Where (B.Start <= GetDate() AND C.End >= GetDate()) AND (B.TimeCode = C.TimeCode)) ◆KEY [TABLE_A].Code = [TABLE_B].Code [TABLE_B].TimeCode = [TABLE_C].TimeCode ◆[TABLE_A] Code Data 001 100 002 200 003 300 004 400 <- DataをNullにする ◆[TABLE_B] Code TimeCode 001 AAA 002 AAA 003 AAA 004 BBB <- 今日2/18ヒット 001 CCC 002 CCC ◆[TABLE_C] TimeCode Start End AAA 2009/1/1 2009/2/15 BBB 2009/2/13 2009/2/20 <- 今日2/18ヒット CCC 2009/2/19 2009/10/5 データは[TABLE_A] 6万件、[TABLE_B]が20万件、[TABLE_C]が100件程度です。 夜遅くにすみませんがお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- jamshid6
- ベストアンサー率88% (591/669)
書くとすれば以下の通りですが、レスポンスが改善するかどうかはオプティマイザ次第です。 UPDATE [TABLE_A] SET Data = NULL FROM [TABLE_A] A WHERE EXISTS (SELECT NULL FROM [TABLE_B] B INNER JOIN [TABLE_C] C ON C.TimeCode=B.TimeCode WHERE B.Code=A.Code AND C.Start <=GetDate() AND C.[End] >= GetDate())
お礼
夜遅くのご回答ありがとうございます。 こちらの環境で早速試してみます。 本当にありがとうございました。