アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

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件)

> 上記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ってこういうものなのでしょうか?

副問い合わせの結果の件数とは関係なかったようです。
申し訳ありません。

補足日時:2011/04/28 11:11
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

副問い合わせで検索している項目はNOT NULL制約があり、NULL値は返ってきていません。

困りました。。。

お礼日時:2011/04/28 08:49

> IN句に副問い合わせを使用する場合、


> その副問い合わせの結果は2件以下にする必要がある
> なんてルールがあったりするのでしょうか。

ありません。
即値でIN句を使う場合は、指定できる即値について制限
がある場合はありますが。(Oracleなら1000個まで)
本当におっしゃっている現象が起きているならsymfoware
の問題である可能性があるので富士通に相談されたほうが
いいと思います。

この回答への補足

お世話になります。

上の補足をアップしたあと、さらに調査を進めたところ、発生条件がよくわからなくなってきましたので、申し訳ないですが、質問は一旦閉めます。

もっと情報をまとめてから再度ご質問させていただきます。

ありがとうございました。

補足日時:2011/04/28 16:37
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

そうですよね。
私の理解が間違っているのかと思いました。

nora1962さんのおっしゃるとおり、一度開発元に問い合わせてみようと思います。

お礼日時:2011/04/28 08:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す