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

解決済みの質問

SQL - 3つのキーに含まれないもの?

いつもお世話になっております。
テーブルAと、テーブルA_WRKがあり、
テーブルA_WRKはテーブルAと同じレイアウトです。

2つのテーブルのキーは3つあります。

二つのテーブルをUNIONでくっつけて表示したいのですが、
テーブルA_WRKにあるデータと同じキーのテーブルAのデータは
検索対象からはずしたいのです。

これがキーが一つだったら

Select * テーブルA_WRK
Where キー項目1 = 条件
Union
Select * テーブルA
Where キー項目1 = 条件
And キー項目1 Not In
(Select * テーブルA_WRK
Where キー項目1 = 条件)

で検索できると思うのですが、
3つキーがある場合にどう書いてよいかわかりません。

使用DBはSQLServer2000です。

宜しくご教授お願いいたしますm(__)m

投稿日時 - 2005-01-27 10:22:35

QNo.1187941

すぐに回答ほしいです

質問者が選んだベストアンサー

>0=とすると、その後のSQL文のCount(*)の結果が0になるものをひっぱってくるということでしょうか?

これはA_WRKを条件で検索した時に、1件でもデータが有れば0より以外の数字が帰ってきますし、条件でレコードが見つからなくても、0が帰ってくるようにCountを使っています。

だから引っ張ってくるって感覚よりも、条件を満たすレコードがA_WRK無い時って条件を追加している感じです。

>これは、テーブルAの何がワークの何と合わないものっていう指定の仕方をしないのですが、テーブルAとテーブルA_WRKのWhere条件を同じ項目で指定する場合のみ有効な構文なのでしょうか?

なんていったらいいのでしょうか、0=(SELECT~~条件)ははじめのSelect文でA_WRKで選択しているかどうかを調べようとしているので、条件を同じにしないと意味がなくなってしまいます。
逆にカッコの中で完結するSelect文(複問合せ)を変えることで色々なパターンに対応できると思います。


もうちょっと構文を簡潔にする事が出来るのかもしれないですが、同じ条件を複数書く事で実行コストは低いと思います。

投稿日時 - 2005-01-27 12:08:08

お礼

なるほどです。
色々聞いて、お手間を取らせてしまってすみません

すっごい勉強になりました。
有り難うございました。

投稿日時 - 2005-01-27 12:47:21

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

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

回答(4)

ANo.3

>で、ちょっとハテナ(?_?)だったのですが、
>WHERE条件で指定するのは二つだけでよいのですか?
>
>その辺がちょっと理解できませんでしたσ(^◇^;)

すみません、手抜きです^^;;;
ブラウザの表示によっては改行して見難くなりそうだったので条件を一個省いてしまいました。
コメントしておけばよかったですね、、、

投稿日時 - 2005-01-27 11:30:22

補足

早速のご回答有り難うございました。
taka451213さん、残念ながらSQLServerでは無理みたいです(;_;)
でも、今後Oracleの仕事が来たときのために覚えておきますね。
有り難うございました。

DrSumireさん、とりあえず条件を3つ指定する方法で希望の結果が出ましたが、
もしよろしければもう少し教えていただけませんか?

0=とすると、その後のSQL文のCount(*)の結果が0になるものをひっぱってくるということでしょうか?
これは、テーブルAの何がワークの何と合わないものっていう指定の仕方をしないのですが、テーブルAとテーブルA_WRKのWhere条件を同じ項目で指定する場合のみ有効な構文なのでしょうか?

投稿日時 - 2005-01-27 11:42:31

お礼

あ、そうだったんですねσ(^◇^;)
いや、もしかしてそうかも・・・とかも思ったのですが。
あげあしとりになってしまってすみませんm(__)m

投稿日時 - 2005-01-27 11:43:42

ANo.2

キー三個でユニークが取れているデータなら

Select * FROM A_WRK
Where Key1 = 条件1 AND Key2 = 条件2
Union
Select * FROM A
Where Key1 = 条件1 AND Key2= 条件2
And 0 = (Select COUNT(*) FROM A_WRK
Where Key1 = 条件1 AND Key2= 条件2)

とすれば目的のクエリーが出来るはずです。

キー3個でユニークが取れないデータなら考え方が既に間違っていますので、キー3個で複数のレコードが返ってくるのであれば補足をお願いします。

投稿日時 - 2005-01-27 10:57:49

お礼

有り難うございます。なるほどです。
テーブルの主キーは3つのみです。

で、ちょっとハテナ(?_?)だったのですが、
WHERE条件で指定するのは二つだけでよいのですか?

その辺がちょっと理解できませんでしたσ(^◇^;)

投稿日時 - 2005-01-27 11:20:11

ANo.1

こんにちは。

SQLServerで使用可能かどうかわからないのですが・・・、

SELECT *
FROM tbl_1
WHERE (A,B,C) NOT IN (SELECT A',B',C' FROM tbl_2)

のようなSQLになると思います。
ORACLEだけだったらごめんなさい・・・。
(^^ゞ

投稿日時 - 2005-01-27 10:54:41

お礼

w(゜o゜)w おお-!なるほどです。
ためしにやってみます。有り難うございました。

投稿日時 - 2005-01-27 11:20:34

あなたにオススメの質問