すいません、VB4しかやってないんです、VBAはやったけど(ぼそ)

なのに.NETですか? あやしいジャンガリアンベムスターがさすらうゴシックペナルティ

目次

Blog 利用状況

ニュース


片桐 継 は  
こんなやつ

かたぎり つぐ ってよむの

大阪生まれ河内育ちなんだけど
東京に住んでたりするの
IT人材派遣会社してたりするの
エセモノカキやってたりするの
VB系言語が得意だったりするの
SQL文が大好きだったりするの

お仕事探してる人、
こんたくとぷりーずなの
正体は会った人だけ知ってるの

空気読まなくてごめんなさいなの


うちの亀

Go to Ustream


イベント予定



ネット活動

mixiの鍵はこれだっ! in mixi
ぴくま同盟:理事 in ぴんくま

C#, VB.NET 掲示板
C# VB.NET掲示板
わんくま同盟
わんくま同盟


いやー、もうね、il||li _| ̄|○ il||li

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

イベント活動

プログラムの活動

INNER JOINの不思議?

なんだか斜め上に不思議シリーズ

あるテーブルがいるとする

HogeT (A bigint,B varchar(20),C Money,D bigint INDENTITY(0,1) )

HogeM ( B varchar(20),E char(1))

このとき、HogeMにおいてEが1のBと同じBを持つHogeTでCの金額があるAに対してDの昇順で連番を振りたい、とする

UPDATE T
 SET T.A = S.ID
 from HogeT T ,
   (  select row_number() over (order by D) as ID , D
   
  from HogeT INNER JOIN HogeM ON HogeM.B = HogeT.B AND HogeM.E = '1'
      Where HogeT.C > 0 ) S
  WHERE T.D = S.D

UPDATE T
  SET T.A = S.ID
  from HogeT T ,
  (  select row_number() over (order by D) as ID , D
     from HogeT
    WHERE B in (SELECT B from HogeM Where  HogeM.E = '1')  and C  > 0 )  S
  WHERE T.D = S.D

この二つのSQL、やりたい事が同じはずなんだけど、結果が違う。それもSQL-CLRからADO.netのExecuteNonQueryで処理した場合で、データ件数が増えてだいたい5千件越えた辺りから、起き始める。Where句だけで処理する方は安定してるんだけど、InnerJoin だと漏れてしまうレコードが数件。漏れるレコードは毎回同じなので、何かが違うんだと思う。

自分でT-SQLで手動で動かしてると一致してたんだけどなぁ……うーん不思議。

 

投稿日時 : 2008年2月22日 0:35

コメントを追加

# re: INNER JOINの不思議? 2008/02/22 6:43 ひろえむ

なんか呼ばれたような気がしたのは気のせいかしら・・・

あ、HogeMか(^o^;

# re: INNER JOINの不思議? 2008/02/22 9:37 凪瀬

8000件過ぎたころから、ではないのですね :-P

# re: INNER JOINの不思議? 2008/02/22 12:21 オノデラ

2番目の UPDATE で where が 2つ並んでいるんですけど、これって動くんですか?

> WHERE B in (SELECT B from HogeM Where HogeM.E = '1') where C > 0 ) S

# re: INNER JOINの不思議? 2008/02/23 10:55 片桐

>オノデラさん

突っ込みありがとうございますです。
うん、Where→Andですね
修正しておきました

タイトル  
名前  
URL
コメント