お世話になります。
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も見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
symfowareのSQL文in句をバッチで実行したい
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OracleのデータをACCESSでダン...
-
MSSQLとMySQLのSQL文の違いにつ...
-
T-SQLで任意の箇所で強制終了す...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
オラクルのUPDATEで複数テーブル
-
Accessの構成をコピーしたい
-
UPDATEで既存のレコードに文字...
-
【SQL】他テーブルに含まれる値...
-
AccessからOracle DB(View)を...
-
PostgreSQLのtimestamp型で時間...
-
既存データをINSERT文にして出...
-
実行時エラー:2517 プロシージ...
-
全テーブルの列数を調査したい
-
truncate tableを使って複数の...
-
limit offset はupdate文には使...
-
右向き、左向きの速度が最大と...
-
SELECT文で足し算をした場合、N...
-
Excelでしりとりを作る方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
T-SQLで任意の箇所で強制終了す...
-
chr(13) と char(13) の違いっ...
-
OracleとSQL ServerのSQL文上で...
-
ゼロ未満の場合で更新する場合
-
MySQLで改行を含んだ文を登録し...
-
SQLの「句」とはなんですか
-
複雑なSQL文を独学する方法
-
Pro*C 静的SQLでもSQLインジェ...
-
IN句に副問合わせを使う場合と...
-
MSSQLとMySQLのSQL文の違いにつ...
-
1行のSQL文を改行するツール
-
libpqについて
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
sqlに記述できない文字
-
既存データをINSERT文にして出...
-
PostgreSQLのtimestamp型で時間...
-
truncate tableを使って複数の...
-
オラクルのUPDATEで複数テーブル
おすすめ情報