お世話になります。
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で質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
T-SQLで任意の箇所で強制終了す...
-
MSSQLとMySQLのSQL文の違いにつ...
-
ゼロ未満の場合で更新する場合
-
SQLの「句」とはなんですか
-
OracleとSQL ServerのSQL文上で...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
Accessで今日から5日後
-
truncate tableを使って複数の...
-
フラグをたてるってどういうこ...
-
テーブル名が可変の場合のクエ...
-
結合したテーブルをSUMしたい
-
オラクルのUPDATEで複数テーブル
-
ACCESSのVBAにてExcelに行...
-
sqlに記述できない文字
-
UPDATEで既存のレコードに文字...
-
PostgreSQLのtimestamp型で時間...
-
SQLで、Join句で結合したテ...
-
全テーブルの列数を調査したい
-
データ無し時は空白行にしたい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
T-SQLで任意の箇所で強制終了す...
-
chr(13) と char(13) の違いっ...
-
OracleとSQL ServerのSQL文上で...
-
ゼロ未満の場合で更新する場合
-
SQLの「句」とはなんですか
-
複雑なSQL文を独学する方法
-
IN句に副問合わせを使う場合と...
-
SELECT * FROM
-
InformixのSQL文Where句で
-
OracleのデータをACCESSでダン...
-
MSSQLとMySQLのSQL文の違いにつ...
-
SQL実行エラー時のロールバック...
-
MySQLで改行を含んだ文を登録し...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
sqlに記述できない文字
-
UPDATEで既存のレコードに文字...
-
テーブル名が可変の場合のクエ...
-
エラーを起こす方法
おすすめ情報