- PR -

同じカラムの値が同じで他カラムの値が異なるものの抽出について(MDB2003)

投稿者投稿内容
birdfly
会議室デビュー日: 2006/02/22
投稿数: 19
投稿日時: 2006-05-11 10:08
同じカラムの値が同じで他カラムの値が異なるものの抽出を行いたいのですが、
同じカラムの値が同じかつ他カラムの値が異なるものの指定がわかりません。
なんとか1つのSQLで実現できればと思っております。
実施したいことは、以下の通りです。

【環境】
Access2003
WindowsXP


【抽出条件】
GIDが同じ番号かつEIDが異なるもの

もとデータ
----------------------
No EID GID
1 2 1653
2 2 1657
3 2 2066
4 2 2308
5 2 2769
6 2 1443
7 2 2905
8 2 2942
9 2 3125
10 2 3072
11 2 1646
12 2 3186
13 2 3194
14 1 294
15 1 1439
16 1 1443
17 1 1445
18 1 1527
19 1 1527
20 1 1532
21 1 1330
22 1 1416
23 1 1646
24 1 1646
25 1 1827
----------------------

期待する結果
----------------------
No EID GID
6 2 1443
11 2 1646
16 1 1443
23 1 1646
24 1 1646
----------------------
※ No 18,19はヒットしないのが望ましい

よろしくお願いします。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-11 10:27
こんなんで合ってますか?

#該当テーブルを仮にTestとして作成して実行・確認してみました。

コード:
SELECT *
FROM Test WHERE exists ( select * from Test iTest where Test.EID <> iTest.EID AND Test.GID = iTest.GID ) 
; 



_________________
夏椰 @ わんくま同盟
夏椰の庵
Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 )
birdfly
会議室デビュー日: 2006/02/22
投稿数: 19
投稿日時: 2006-05-11 10:45
夏椰さん
早速の返信ありがとうございます。

ほぼやりたいことは実現できました!!

ただ、1点書き忘れてまして・・・
EIDには、1から9までの数字がありまして、
正しい抽出条件は以下のとおりでした。
【抽出条件】
GIDが同じ番号かつEIDが異なるもので、
1もしくは5などの数値を指定して抽出

です。
1もしくは5の数値は、1から9個まで指定できるもの。

この条件で↓はできますでしょうか?

期待する結果
----------------------
No EID GID
6 2 1443
11 2 1646
16 1 1443
23 1 1646
24 1 1646
----------------------
※ No 18,19はヒットしないのが望ましい

説明不足で申し訳ないです。
よろしくお願いします。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-11 10:57
確認させてください。

引用:

birdflyさんの書き込み (2006-05-11 10:45) より:

【抽出条件】
GIDが同じ番号かつEIDが異なるもので、
1もしくは5などの数値を指定して抽出



「1もしくは5」ってどの列にかかる条件ですか?
birdfly
会議室デビュー日: 2006/02/22
投稿数: 19
投稿日時: 2006-05-11 11:03
夏椰さん

おっしゃるとおりですね・・・汗)
またまた説明不足で申し訳ないです。

「1もしくは5」ってどの列にかかる条件ですか?
→EIDです。

よろしくお願いします。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-11 11:31
またまた確認です。

引用:

birdflyさんの書き込み (2006-05-11 11:03) より:
「1もしくは5」ってどの列にかかる条件ですか?
→EIDです。



ということは
引用:

期待する結果
----------------------
No EID GID
6 2 1443
11 2 1646
16 1 1443
23 1 1646
24 1 1646
----------------------


で No 6, 11のレコードが表示されるのは誤りですか?

上記内容が合っているとした場合、
私が提示したSQLのどこかに
「1もしくは5」という条件を付加すればいいことになりますね。
「1もしくは5」というのをSQL文でどう表現すればいいか
思いつきますか?
birdfly
会議室デビュー日: 2006/02/22
投稿数: 19
投稿日時: 2006-05-11 11:44
たびたびありがとうございます。

引用:

で No 6, 11のレコードが表示されるのは誤りですか?


→誤りではないです。
「1もしくは2を指定した場合」にヒットするものでEIDが異なってかつGIDが同じなので。

引用:

私が提示したSQLのどこかに
「1もしくは5」という条件を付加すればいいことになりますね。
「1もしくは5」というのをSQL文でどう表現すればいいか思いつきますか?


→以下のようにして出来たっぽいです!!
試したところそれらしい値が返ってきました。
コード:
SELECT *
FROM Test WHERE exists ( select * from Test iTest where Test.EID <> iTest.EID
 AND ((Test.EID=1 OR Test.EID=5) AND (iTest.EID=1 OR iTest.EID=5)) AND 
Test.GID = iTest.GID ) ; 



あってますよね?もっと簡単に書けるのかはわかりませんでした・・・。

夏椰さん
ありがとうございました!!
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-11 12:02
引用:

birdflyさんの書き込み (2006-05-11 11:44) より:
→以下のようにして出来たっぽいです!!
試したところそれらしい値が返ってきました。
コード:
SELECT *
FROM Test WHERE exists ( select * from Test iTest where Test.EID <> iTest.EID
 AND ((Test.EID=1 OR Test.EID=5) AND (iTest.EID=1 OR iTest.EID=5)) AND 
Test.GID = iTest.GID ) ; 




「1もしくは5」をORで指定したんですね。

複数で数が変わる可能性があるのであればORでつなげるよりも
EID IN( '1','5' )
形の方がいいと思いますよ。
#()内を書き換えるだけ。
_________________
夏椰 @ わんくま同盟
夏椰の庵
Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 )

スキルアップ/キャリアアップ(JOB@IT)