
VB6のプログラムを読んでいたら、ACCESSのMDBにSQL文を
投げる際に以下のような記述がありました。
------------------------------------------------------
select * from tableA
where (colA & colB) in ((1 & 1), (2 & 2))
------------------------------------------------------
これはどういったことを表しているのでしょうか?
雰囲気的には
(colA, colB) の組み合わせが (1, 1) か (2, 2)
というようなことを表しているのかなと思うのですが
はっきりとわからなかったため質問させていただきました。
また、これはOracle等の他のDBでも使用できる構文
なのでしょうか?
ご存知の方がいらっしゃいましたら教えていただけたらと
思います。
No.1ベストアンサー
- 回答日時:
<IN=集合>
WHERE節のキーワード INに値を列挙することで、その値を持つ列を抽出することができます。
<列名> [NOT] IN (<値1>,<値2>,...<値n>,)
SELECT * FROM 得意先一覧 WHERE 郵便番号 IN ('8300001', '8300002')
Informix、SQL Sever では、このように書きます。
ですから、構文としては共通した書き方です。
ただし、Access では、演算子をSQLのそれでなくVBAのそれが通用します。
・文字列の加算・・・&
・'11' と 11とで型照合エラーが発生しない。
などです。
ですから、Access 以外では、次のような書き方が一般的。
[イミディエイト]
? DBSelect("SELECT * FROM A WHERE 列1+列2 IN ('1'+'1', '2'+'2')")
1;2;2;
2;1;1;
この場合、列1と列2の組合せが1+1、2+2 を取得しています。
ただし、示されているコードはバグに近い書き方です。
[イミディエイト]
? DBSelect("SELECT * FROM A WHERE 列1+列2 IN ('11'+'11', '22'+'22')")
1;11;11;
2;22;22;
3;111;1;
[イミディエイト]
? DBSelect("SELECT * FROM A WHERE 列1+'/'+列2 IN ('11/11', '22/22')")
1;11;11;
2;22;22;
この2つではヒットするレコードが違います。
ちょっと、問題ありかと思います。
>>ただし、示されているコードはバグに近い書き方です。
なるほど、そうなんですか。
勉強になりました。
回答をありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Transact-sql】 where条件、i...
-
INDIRECT関数の代替方法は?
-
BULK INSERT時のNull許容について
-
自分自身のテーブルを参照して更新
-
WHERE句で結合。INNER JOINとの...
-
数百行の複数列を1列にしたい。
-
Oracleの制約について
-
DBの定義のサイズを大きくし過...
-
一部のカラムでdistinctし全て...
-
SELECT文で、指定カラム以外の...
-
LIKEの右側にカラムを指定でき...
-
テーブルの列数を調べたい
-
MYSQLで全てのカラムから検索す...
-
GREATESTで NULLをスルーする方...
-
group byで最後のレコードを抽...
-
[MySQL]LOAD DATA INFILE一部レ...
-
SQLでカラムを追加し、条件に合...
-
WHEREなどの条件が多い場合、ど...
-
MySQL 改行コードを含む文字列...
-
複数カラムに対するLIKE文の最適化
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT関数の代替方法は?
-
BULK INSERT時のNull許容について
-
【Transact-sql】 where条件、i...
-
Accessの「IIF」に相当するSQL...
-
自分自身のテーブルを参照して更新
-
SQLiteで「UPDATE table1 SET c...
-
sqlite3でrowid以外にid必要で...
-
mongoDBについて質問です
-
Accessで複数(3以上)...
-
create tableのフィールド名
-
列を行に表示する方法は?
-
SELECT文で、指定カラム以外の...
-
DBの定義のサイズを大きくし過...
-
一部のカラムでdistinctし全て...
-
SQLServerでNULLを挿入したいです
-
UNIONする際、片方テーブルしか...
-
MYSQLで全てのカラムから検索す...
-
AUTO_INCREMENTに0はダメ?
-
group byで最後のレコードを抽...
-
GREATESTで NULLをスルーする方...
おすすめ情報