人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLについての質問です。
【環境】
windows2000 server
SQL server 2000

?.SELECT * FROM TBL_A WHERE FLG = 1
?.SELECT * FROM TBL_B WHERE FLG = 2

?の結果と?の結果を用い、共通の3つの項目(主キーではない)を
比較し差分を求めたいのですが、どういったSQL文を組めばよいでしょうか?

NOT EXISTS述語で可能でしょうか?不可能であれば、別の方法でも構いません。

※共通の項目をID,TIME,KINDとします。

●質問者: keseranpasaran
●カテゴリ:コンピュータ
✍キーワード:SELECT SQL SQL Server TIME Windows2000
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● matsu-boolean
●50ポイント ベストアンサー

とりあえず、not exists でいけそうな感じでした。

アクセスプランを見たところ、TBL_BでID, TIME, KIND, FLG にインデックスがあれば使われるようでした。


select
 * 
from
 TBL_A A 
where
 not exists ( 
 select
 * 
 from
 TBL_B B 
 where
 B.ID = A.ID 
 and B.TIME = A.TIME 
 and B.KIND = A.KIND
 and B.FLG = 2
 ) and A.FLG = 1
◎質問者からの返答

思い通りの結果が得られました。

ありがとうございます。

ふむふむなるほど、こんな組み方をするんですね。


2 ● chuken_kenkou
●20ポイント

差分検索の例を二つ示します。

<SQL例1>NOT EXISTSを使う

SELECT * FROM TBL_A AS A
 WHERE NOT EXISTS(SELECT * FROM TBL_B
 WHERE A.ID=ID
    AND A."TIME"="TIME"
 AND A.KIND=KIND)

<SQL例2>LEFT JOINを使う

SELECT A.* FROM TBL_A AS A
 LEFT JOIN TBL_B AS B
 ON A.ID=B.ID
 AND A."TIME"=B."TIME"
 AND A.KIND=B.KIND
 WHERE B.ID IS NULL
 AND B."TIME" IS NULL
 AND B.KIND IS NULL
◎質問者からの返答

ありがとうございます。

<SQL例1>の様にNOT EXISTSを利用したSQL文は組めたのですが、

そのSQL文に?・?のWHERE条件文をどう組み込めばいいのか

わからず、今回の質問をさせて頂きました。

LEFT JOINはACCESSの不一致クエリの考え方と同じみたいですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ