Skip to content
インタ―システムズ製品やソリューション、キャリアの機会などについて、検索してご覧ください。

警告: SQL標準でない GROUP BY クエリで間違った結果が返る

2021年07月27日 - 警告: SQL標準でない GROUP BY クエリで間違った結果が返る

 
対象バージョン:
InterSystems IRIS および IRIS for Health: 2019.1.0 以降

対象プラットフォーム: すべて

InterSystemsは、間違ったクエリ結果が返る問題を修正しました。この問題は上記の InterSystems 製品のバージョンで発生する可能性があります。

[問題の詳細]
以下のすべての条件をみたした場合、クエリ結果が不正確な可能性があります。

  • GROUP BY を使用し、かつ、COUNT などの集計を使って「いない」
  • GROUP BY で指定して「いない」フィールドを SELECT で指定し(*)、かつ、そのフィールドが WHERE 条件に含まれている
  • 単一のインデックスによりクエリ結果が取得でき、かつ、そのインデックスが GROUP BY で指定されたフィールドから始まっている

(*) グループ化していないフィールドを SELECT に含めることは、 InterSystemsSQL独自の拡張であり、SQL標準でないことにご注意ください。

この問題により、上記をみたすクエリでは WHERE 条件が結果に正しく反映されません。すなわち、条件をみたさない行を含むクエリ結果を返すことになります。

なお、この警告の最後に、問題の影響を受けるクエリと受けないクエリ例を掲載しています。

[解決方法]
この問題は修正ID: AK1043 で解決します。この修正は今後リリースされるInterSystems IRIS および IRIS for Health 2020.1.2 や 2021.1.1 を含むすべての製品に含まれる予定です。また、お客様のご要望により、修正を現在お使いの製品に対するパッチとして個別に作成してご提供することが可能です。お使いのシステムに対するパッチが必要な場合は、バージョン情報とライセンスキー情報をご確認の上、 インターシステムズカスタマーサポートセンターまでお知らせ下さい。

※HealthShare をお使いのお客様へ
InterSystems にて HealthShare ファミリーの製品をレビューした結果、上記条件をみたすクエリは、製品内部で使用されていないことが判明しました。ただし、HealthShare 製品とは別に InterSystems IRIS 機能を使われているお客様は、ご自身で作成されたアプリケーションやカスタマイズがこの問題の影響を受けるかご確認いただく必要があります。

[クエリ例]
本問題の影響に関するクエリ例をお伝えします。
ここでは test.TestTable テーブル を用いて説明します。テーブルには 3つのInteger プロパティと 1つのインデックスが、以下のように定義されています。

Property Int1 As %Integer;
Property Int2 As %Integer;
Property Int3 As %Integer;
Index GroupBy On (Int1, Int2);

影響を受けるクエリ

SELECT Int1, Int2 FROM test.TestTable WHERE Int2 > 1 GROUP BY Int1

  • このクエリは上記の条件をみたすため、本問題の影響を受けます。そのため Int2 <= 1 の行も誤って表示されます。

SELECT Int1, ID FROM test.TestTable WHERE Int2 <= 1 GROUP BY Int1

  • このクエリも本問題の影響をうけます。IDがインデックスに含まれるため結果をインデックスから直接取得できるからです。そのため Int2 > 1 の行も誤って表示されます。

影響を受けないクエリ

SELECT Int1, Int2 FROM test.TestTable WHERE Int2 > 1

  • GROUP BY を使用していないため、影響を受けません。

SELECT Int1, Int2, COUNT(*) FROM test.TestTable WHERE Int2 > 1 GROUP BY Int1

  • COUNT 集計を使用しているため、影響を受けません。

SELECT Int1, Int2 FROM test.TestTable WHERE Int1 > 1 GROUP BY Int1
SELECT Int1, Int2 FROM test.TestTable GROUP BY Int1

  • いずれのクエリも「GROUP BY で指定していないフィールドが WHERE 条件に含まれている」条件にあてはまらないため、影響を受けません。

SELECT Int1, Int2 FROM test.TestTable WHERE Int1 > 1 GROUP BY Int2

  • テーブルの複合インデックスが GROUP BY で指定しているフィールドから始まっていないため、影響を受けません。

SELECT Int1, Int2 FROM test.TestTable WHERE Int2 > 1 AND Int3 > 1 GROUP BY Int1
SELECT Int1, Int3 FROM test.TestTable WHERE Int2 > 1 GROUP BY Int 1

  • いずれのクエリも Int3 フィールドを使っており、このフィールドはインデックスに格納されていません。つまり、このクエリは、インデックスのみから結果を取得できないため、影響を受けません。

 

関連するトピックス

最新のアラート&アドバイザリー

2024年 8月 17日
インターシステムズは、非常にまれな状況下で、マルチボリュームデータベースでデータベース破損または エラーが発生する可能性がある不具合を修正しました。
2024年 8月 7日
HS2024-03 警告通知 には4つの警告が含まれます。 各警告の概要は以下の通りです。 各警告の詳細はリンク先の通知文書に記載されています。
2024年 7月 1日
Broadcom は、データベースアプリケーションにおいてデータ整合性エラーを引き起こす可能性がある問題を発表しました。詳細は、以下の Broadcom のページをご参照ください。
2024年 5月 2日
インターシステムズは、一部の SQL クエリが不正な結果を返す原因となる 3 つの不具合を修正しました。 影響を受けるクエリの詳細については、以下を参照してください。
2023年 11月 21日
InterSystems IRIS for Health, HealthShare Health Connect そしてHealthShare 製品に関して複数の警告(HS2023-02-*)が発表されました。
2023年 11月 15日
InterSystems は SAM (System Alerting & Monitoring) のサポートを終了し、今後は非推奨とすることを決定しました。 InterSystems は本テクノロジーを利用しているお客様のサポートを続けますが、新規プロジェクトでの利用を推奨しません。
2023年 10月 31日
InterSystems は InterSystems IRIS での VxFS ファイルシステムのサポートを終了し、 IRIS 2023.3 から非推奨とすることを決定しました。
2023年 10月 24日
InterSystems は、IRIS 2023.3 から InterSystems Cloud Manager (ICM) の開発を中止し、非推奨とすることを決定しました。
2023年 10月 17日
InterSystems は、IRIS 2023.3 から InterSystems IRIS NLP (自然言語処理,旧 iKnow) の開発を中止し、非推奨とすることを決定しました。

今すぐ申し込む

サポートアラート、重要な問題、
修正、製品リリースに関する通知を受け取ることができます。
*必須項目
Highlighted fields are required
*必須項目
Highlighted fields are required
このフォームを送信することにより、お客様は、サポートアラート、重要な問題、重要なアップデート、修正、および製品リリースに関する通知を電子メールで受け取ることに同意するものとします。 さらに、お客様は、お客様のビジネスコンタクト情報が、米国でホストされている当社のCRMソリューションに入力されることに同意したことになります。お客様情報は、適用されるデータ保護法に従って維持されます。
**送信ボタンをクリックすることにより、お客様は、既存および将来のインターシステムズ製品、提供物、イベントに関するニュース、更新、その他のマーケティング目的のために連絡を受けることに同意します。