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とします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/11/08 10:23:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:matsu-boolean No.1

回答回数43ベストアンサー獲得回数7

ポイント50pt

とりあえず、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
id:keseranpasaran

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

ありがとうございます。

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

2007/11/08 10:20:17

その他の回答1件)

id:matsu-boolean No.1

回答回数43ベストアンサー獲得回数7ここでベストアンサー

ポイント50pt

とりあえず、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
id:keseranpasaran

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

ありがとうございます。

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

2007/11/08 10:20:17
id:chuken_kenkou No.2

回答回数722ベストアンサー獲得回数54

ポイント20pt

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

<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
id:keseranpasaran

ありがとうございます。

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

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

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

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

2007/11/08 10:20:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません