2025年10月8日 - 警告:SQL クエリにおける特定の外部結合パターンを使用すると間違った結果を返す
[概要]
・警告 ID: DP-442892
・影響を受ける製品とバージョン:
製品:
InterSystems IRIS
InterSystems IRIS for Health
HealthShare Health Connect
バージョン:
2023.3.0, 2024.1.0~2024.1.3, 2024.2.0, 2024.3.0, 2025.1.0
HealthShare Unified Care Record
バージョン:
2024.2.0, 2025.1
・リスクカテゴリー & スコア:
誤作動 高リスク
・発生条件
内部結合側のビューまたはサブクエリのテーブルに結合フィールドのインデックスがある外部結合を使用した場合
[発生する問題]
InterSystems IRIS バージョン 2023.3.0、2024.1.0~2024.1.3、2024.2.0、2024.3.0
および 2025.1.0 において、外部結合を使用するクエリを並列実行する場合、
クエリが誤った結果を返す可能性があります。
クエリが誤った結果を返すには以下のすべての条件を満たす必要があります:
・外部結合 (RIGHT、LEFT、OUTER、または FULL) を使用しており、内部結合側
(例:「t1 LEFT JOIN t2」における t2)がビューまたはサブクエリであること
・そのビューまたはサブクエリから結合条件 (ON 句または WHERE 句で直接指定される)
に参加するすべての値がフィールドであることかつそれらのフィールドが、そのビューまたはサブクエリが選択するテーブルでインデックス化されていること
・内部結合側のビューまたはサブクエリに以下のいずれも含まないこと:
o UNION 句
o TOP 句(または同等の LIMIT/OFFSET 句、OFFSET/FETCH 句)
o 非グループ化集約関数
o グループ化集約関数 (GROUP BY 句または %FOREACH 句) で、グループ化値の集合が結合条件で使用される値と等しくなく、かつそれらの値の上位集合でもない場合
例えば、以下のケースが影響を受けます:
SELECT * FROM t1 LEFT JOIN (SELECT field2, field3 FROM t2) AS v2 ON
t1.field1 = v2.field2
t2 のフィールド 2 にインデックスがある場合
SELECT * FROM (SELECT field1, field3 FROM t1) AS v1 RIGHT JOIN t2 WHERE v1.field1 = t2.field2
t1 のフィールド 1 にインデックスがある場合
ただし、以下のケースは該当しません:
SELECT * FROM t1 LEFT JOIN (SELECT field2, field3 FROM t2 UNION SELECT field4, field5 FROM t3) AS v2 ON t1.field1 = v2.field2
UNIONが含まれているため
SELECT * FROM t1 LEFT JOIN (SELECT TOP 10 field2, field3 FROM t2) AS
v2 ON t1.field1 = v2.field2
TOP句が含まれているため
SELECT * FROM t1 LEFT JOIN (SELECT SUM(field2) FROM t2) AS v2 ON
t1.field1 = v2.field2
非グループ化された集約が含まれているため
SELECT * FROM t1 LEFT JOIN (SELECT SUM(field2), field3 FROM t2 GROUP BY field3) AS v2 ON t1.field1 = v2.field2
結合フィールドでグループ化されていない集約値があるため
これらの条件を満たすクエリが、影響を受けるバージョンのいずれかで並列実行された場合
(大規模なテーブルサイズに基づくオプティマイザの決定、または明示的な %PARALLEL ヒントによる)、
クエリが誤った結果を返す可能性があります。
[影響]
この問題は、InterSystems IRIS SQL でエラーなく誤った結果を返す原因となる可能性があります。
[解決策]
この問題はバージョン 2024.1.4、2025.1.1、2025.2.0 およびそれ以降のバージョンで修正されています。
・緩和策として、影響を受ける可能性のある SQL クエリに %NOPARALLEL ヒントを含めるか、
AutoParallel 設定を使用して自動クエリ並列化を一時的に無効にすることができます。
お客様のご要望により、本修正 DP-442948 を現在お使いの製品に対する Adhoc として個別に作成し、提供することが可能です。お使いのシステムに対する Adhoc が必要な場合は、カスタマーサポートセンターまでお知らせ下さい。
この警告についてご質問がある場合は、カスタマーサポートセンターにご連絡下さい。