こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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件程度です。

夜遅くにすみませんがお願いします。

投稿日時 - 2009-02-18 22:42:17

QNo.4729457

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

書くとすれば以下の通りですが、レスポンスが改善するかどうかはオプティマイザ次第です。
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())

投稿日時 - 2009-02-19 00:56:44

お礼

夜遅くのご回答ありがとうございます。
こちらの環境で早速試してみます。
本当にありがとうございました。

投稿日時 - 2009-02-19 09:26:14

あなたにオススメの質問