- PR -

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

投稿者投稿内容
birdfly
会議室デビュー日: 2006/02/22
投稿数: 19
投稿日時: 2006-05-11 12:33
アドバイスありがとうございます。

引用:

複数で数が変わる可能性があるのであればORでつなげるよりも
EID IN( '1','5' )
形の方がいいと思いますよ。


→ちなみにINのほうがORよりも処理が速かったりするんですか?
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-11 12:53
引用:

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

→ちなみにINのほうがORよりも処理が速かったりするんですか?



あまり性能差はないと思います。
ただ、ORをつなげて長くなるよりも
INで書いたほうが SQL文がすっきりし、
見やすくなると思います。
_________________
夏椰 @ わんくま同盟
夏椰の庵
Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 )
birdfly
会議室デビュー日: 2006/02/22
投稿数: 19
投稿日時: 2006-05-11 13:01
夏椰さん

ありがとうございました

と書いておき解決と思ったら、1個見つかりました
EIDで複数個指定する場合に、例えば
1,2,5と指定する時、1,2,5すべてに当てはまるものを抽出できませんでした。
(というかその条件を書いてませんでしたが・・・)
1,2だけのものや1,5だけのものがヒットしてしまいました。

ANDに書き換えるとヒットしないし・・・。
うーん、別な方法でしょうか?




[ メッセージ編集済み 編集者: birdfly 編集日時 2006-05-11 13:32 ]
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-11 13:37
引用:

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

EIDで複数個指定する場合に、例えば
1,2,5と指定する時、1,2,5すべてに当てはまるものを抽出できませんでした。
(というかその条件を書いてませんでしたが・・・)
1,2だけのものや1,5だけのものがヒットしてしまいました。



ごめんなさい。
おっしゃりたいことがよくわかりません。

「1もしくは5などの数値を指定して抽出」が
「1,2,5すべてに当てはまるもの」
に変わっているのですが・・・・。

「1,2,5のどれかとEIDが一致するデータ」なら
EID IN ( '1','2','5')となるんですが

もう一度、テーブルからどんなデータがほしいのかを整理してみてください。


_________________
夏椰 @ わんくま同盟
夏椰の庵
Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 )
birdfly
会議室デビュー日: 2006/02/22
投稿数: 19
投稿日時: 2006-05-11 13:48
引用:

「1もしくは5などの数値を指定して抽出」が
「1,2,5すべてに当てはまるもの」
に変わっているのですが・・・・。

もう一度、テーブルからどんなデータがほしいのかを整理してみてください。



申し訳ないです。すっかり3つ以上のときを考えていませんでした

整理すると以下の通りです。

1.指定される条件は、EIDの数値
2.EIDには、単一指定から複数指定がある
取得したいデータは、1で指定したEIDすべてに含まれるものかつGIDが同じもの

となります。

お手数をおかけします。


[ メッセージ編集済み 編集者: birdfly 編集日時 2006-05-11 14:06 ]
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-11 15:15
引用:

birdflyさんの書き込み (2006-05-11 13:48) より:
1.指定される条件は、EIDの数値
2.EIDには、単一指定から複数指定がある
取得したいデータは、1で指定したEIDすべてに含まれるものかつGIDが同じもの




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


ということではなくて?
birdfly
会議室デビュー日: 2006/02/22
投稿数: 19
投稿日時: 2006-05-11 15:42
説明が下手で申し訳ないです。

もう一度、データと期待する値を書かせていただきます。

もとデータ:
--------------------------
No EID GID
1 2 1062
2 2 1084
3 2 1124
4 2 1368
5 2 1653
6 2 1657
7 6 2066
8 7 2308
9 8 2769
10 2 2853
11 2 2905
12 2 2942
13 3 1062
14 3 3125
15 3 3072
16 3 3154
17 3 3186
18 3 3194
19 1 1062
20 1 1084
21 1 1124
22 1 1159
23 5 1062
24 5 1368
--------------------------

検索値:1,2,5

期待するデータ:
--------------------------
No EID GID
1 2 1062
19 1 1062
23 5 1062
--------------------------

と取得したいです。
たびたび申し訳ないですが可能でしょうか?
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-05-11 16:06
え〜っとこういうことかな?
コード:
SELECT *
FROM Test
WHERE No In 
(select No from Test iTest
 where
   Test.EID <> iTest.EID AND
   Test.GID = iTest.GID AND
   Test.EID in ( '1','2','5') AND
   Test.EID in ( '1','2','5') 
 group by No
 having count(No) >= 3 
 );



Noでグルーピングして、INに指定している個数よりカウントが大きいレコードが
INの条件すべてに該当するレコードとなる

って感じですかね?

_________________
夏椰 @ わんくま同盟
夏椰の庵
Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 )

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