

お世話になります。
SQLについての質問です。
RDBMSはSymfowareです。
IN句に副問い合わせを指定するSQLと
その副問い合わせの結果を直接IN句に記載したSQLで
結果が異なってしまいます。
こういうことってありますでしょうか。
以下のようなSQLです。
(1)
SELECT
*
FROM
T1
WHERE
T1.column_A IN (
SELECT T2.column_A FROM T2 WHERE T2.column_B='XXXX'
)
上記IN句内のSELECT文の結果は、'A'、'B'、'C'、'D'です。
(2)
SELECT
*
FROM
T1
WHERE
T1.column_A IN ('A','B','C','D')
この(1)、(2)のSQLの結果が異なってしまいます。
私の環境では(1)では0件、(2)では2件ヒットします。
なぜこのようになるのかわかる方がいらっしゃいましたら
ご教授ください。
ちなみに、DBを操作して、副問い合わせのSELECT文の結果を
'A'、'B'とすると同じ結果が得られます。
副問い合わせのSELECT文の結果が3件以上になると(1)のSQLの
結果は0件になってしまいます。
RDBMSの障害でしょうか・・・?
それとも、IN句に副問い合わせを使用する場合、
その副問い合わせの結果は2件以下にする必要がある
なんてルールがあったりするのでしょうか。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> 上記IN句内のSELECT文の結果は、'A'、'B'、'C'、'D'です。
他に、NULL値が返ってきていませんか?
この回答への補足
質問者です。
すみません、追加でわかったことがありますので、補足欄使わせてください。
-------------------------
お世話になります。
本現象に関してさらに切り分けをすすめて、
新たなことがわかりました。
>上記IN句内のSELECT文の結果は、'A'、'B'、'C'、'D'です。
と書いた部分ですが、これは質問のため私が作ったものでして、
実機で動かした結果ではありませんでした(´Д`;)
現象発生時の副問い合わせの結果は、
実際はこのような簡易なものではありませんでした。
そこで、本当に実機で動かして得られた結果を以下に記載します。
・副問い合わせの結果→結果
という形式で書きます。
・'A'、'AA'→発生
・'A'、'B'→発生せず
・'A'、'B'、'C'→発生せず
・'AB'、'ABC'→発生
・'AB'、'ABC'、'B'→発生
・'B'、'BA'→発生
という感じで副問い合わせの結果間で文字列が
前方一致しているものが存在する場合に発生するようです。
SQLってこういうものなのでしょうか?
副問い合わせの結果の件数とは関係なかったようです。
申し訳ありません。
ご回答ありがとうございます。
副問い合わせで検索している項目はNOT NULL制約があり、NULL値は返ってきていません。
困りました。。。
No.1
- 回答日時:
> IN句に副問い合わせを使用する場合、
> その副問い合わせの結果は2件以下にする必要がある
> なんてルールがあったりするのでしょうか。
ありません。
即値でIN句を使う場合は、指定できる即値について制限
がある場合はありますが。(Oracleなら1000個まで)
本当におっしゃっている現象が起きているならsymfoware
の問題である可能性があるので富士通に相談されたほうが
いいと思います。
この回答への補足
お世話になります。
上の補足をアップしたあと、さらに調査を進めたところ、発生条件がよくわからなくなってきましたので、申し訳ないですが、質問は一旦閉めます。
もっと情報をまとめてから再度ご質問させていただきます。
ありがとうございました。
ご回答ありがとうございます。
そうですよね。
私の理解が間違っているのかと思いました。
nora1962さんのおっしゃるとおり、一度開発元に問い合わせてみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
シートが異なるセル同士を、相...
-
accsessで顧客コードで氏名を呼...
-
Accessを開きなおすとテキスト...
-
どうすれば 拡張子 を写真のよ...
-
将棋のDB。「この局面と同一の...
-
.flex-direction プロパティは...
-
汎用カード型のデータベースソ...
-
データベースがちゃんと作成さ...
-
CSVファイルでテキストの改行の...
-
構文エラー:演算子がありませ...
-
FileMaker Proに近い無料のWeb...
-
半角ハイフンに似た文字
-
データベースの勉強 公務員を目...
-
はじめてのAccess 2019 について
-
DBエラーを解決したい
-
ITパスポートについての質問で...
-
マイクロソフトAccessでsqlのas...
-
情報整理するのに、「 Fullfree...
-
レコード数のカウント
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
T-SQLで任意の箇所で強制終了す...
-
chr(13) と char(13) の違いっ...
-
OracleとSQL ServerのSQL文上で...
-
SQL実行エラー時のロールバック...
-
IN句に副問合わせを使う場合と...
-
SQLの「句」とはなんですか
-
1行のSQL文を改行するツール
-
ゼロ未満の場合で更新する場合
-
複雑なSQL文を独学する方法
-
InformixのSQL文Where句で
-
libpqについて
-
OracleのデータをACCESSでダン...
-
pgAdminIII RAISEの結果取得に...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
truncate tableを使って複数の...
-
オラクルのUPDATEで複数テーブル
-
既存データをINSERT文にして出...
おすすめ情報